{
  "openapi": "3.1.0",
  "info": {
    "title": "Локальный API",
    "description": "API MoreLogin предлагает комплексный и удобный для разработчиков RESTful-интерфейс, позволяющий программно управлять профилями браузеров, облачными телефонами и связанными ресурсами. Локальный API MoreLogin работает на вашем компьютере и доступен по адресу: 127.0.0.1:40000",
    "version": "2026-09-05"
  },
  "servers": [
    {
      "url": "http://127.0.0.1:40000",
      "description": "Local API"
    }
  ],
  "tags": [
    {
      "name": "Profiles",
      "description": "API для раздела «Profiles»."
    },
    {
      "name": "Runtime",
      "description": "API для раздела «Runtime»."
    },
    {
      "name": "Cloud Runtime",
      "description": "API для раздела «Cloud Runtime»."
    },
    {
      "name": "Fingerprint & Device Config",
      "description": "API для раздела «Fingerprint & Device Config»."
    },
    {
      "name": "Cache & Window",
      "description": "API для раздела «Cache & Window»."
    },
    {
      "name": "Proxy Management",
      "description": "API для раздела «Proxy Management»."
    },
    {
      "name": "Group Management",
      "description": "API для раздела «Group Management»."
    },
    {
      "name": "Tag Management",
      "description": "API для раздела «Tag Management»."
    }
  ],
  "x-tagGroups": [
    {
      "name": "",
      "tags": [
        "Profiles",
        "Runtime",
        "Cloud Runtime",
        "Fingerprint & Device Config",
        "Cache & Window"
      ]
    }
  ],
  "paths": {
    "/api/env/start": {
      "post": {
        "summary": "Запустить профиль браузера",
        "operationId": "startBrowserProfileUsingPOST",
        "deprecated": false,
        "description": "Используется для запуска профиля; необходимо указать идентификатор профиля. После\nуспешного запуска вы можете получить отладочный интерфейс профиля для\nвыполнения автоматизации Selenium и Puppeteer. Для Selenium используйте\nWebDriver, соответствующий версии ядра. Путь к WebDriver\nможно получить из ответа после запуска профиля. Требуется\nклиент MoreLogin версии 2.15.0 или выше.\n\nЗадокументированные бизнес-ошибки: `19099`, `19143`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "tags": [
          "Runtime"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "envId": {
                    "type": "string",
                    "description": "Идентификатор среды. Необходимо указать хотя бы один из параметров: `envId` или `uniqueId`.\nЕсли указаны оба параметра, приоритет имеет `envId`.\n\n",
                    "example": "1993244721490239488"
                  },
                  "uniqueId": {
                    "type": "integer",
                    "description": "Серийный номер среды (небольшой целочисленный идентификатор). Необходимо указать хотя бы один из параметров `envId` или `uniqueId`.\nЕсли указаны оба параметра, приоритет имеет `envId`.\n\n",
                    "example": 1
                  },
                  "encryptKey": {
                    "type": "string",
                    "description": "Ключ шифрования. Требуется только в том случае, если в среде включено сквозное шифрование.\n\n",
                    "example": "xxx"
                  },
                  "isHeadless": {
                    "type": "boolean",
                    "description": "Запускать ли программу в безголовом режиме. По умолчанию — `false`, если параметр опущен.\nПримечание: Требуется версия клиента v2.36.0 или выше.\n\n",
                    "default": false,
                    "example": false
                  },
                  "cdpEvasion": {
                    "type": "boolean",
                    "description": "Включите обход идентификации по отпечатку CDP, чтобы снизить риск обнаружения.\nПрименяется только в средах ПК.\nПо умолчанию: `false`.\nПримечание: Требуется версия клиента v2.36.0 или выше.\n\n",
                    "default": false,
                    "example": false
                  },
                  "closeCheckIPPage": {
                    "type": "boolean",
                    "description": "Пропускать ли открытие страницы проверки.\ntrue: проверка прокси до выполнения\nfalse: проверка прокси после выполнения\nПримечание: требуется клиент версии v2.56.0 или выше.\n",
                    "default": false,
                    "example": false
                  },
                  "checkIPErrorHandle": {
                    "type": "integer",
                    "description": "Действие, если проверка прокси не удалась\nЧисловой тип: 1 или 2\n1: Не запускать окружение, если проверка прокси не удалась\n2: Запускать окружение даже если проверка прокси не удалась\nЕсли передан closeCheckIPPage, этот параметр игнорируется; по умолчанию: 1\nПримечание: требуется клиент версии v2.56.0 или выше.\n",
                    "default": 1,
                    "example": 1
                  }
                }
              },
              "example": {
                "envId": "1993244721490239488",
                "isHeadless": false,
                "cdpEvasion": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — объект с полями `envId`, `debugPort`, `type`, `version` и `webdriver`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "envId": {
                          "type": "string",
                          "description": "профиль"
                        },
                        "debugPort": {
                          "type": "string"
                        },
                        "type": {
                          "type": "string"
                        },
                        "version": {
                          "type": "integer"
                        },
                        "webdriver": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "envId",
                        "debugPort",
                        "type",
                        "version",
                        "webdriver"
                      ]
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Уникальный идентификатор запроса; укажите его при обращении в поддержку"
                    }
                  },
                  "required": [
                    "data"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "envId": "1673823102599682",
                    "debugPort": "9222",
                    "type": "string",
                    "version": 1,
                    "webdriver": "string"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/close": {
      "post": {
        "operationId": "closeBrowserProfileLocal",
        "summary": "Остановить профиль браузера",
        "deprecated": false,
        "description": "Закрывает запущенный профиль браузера.\n\n- **Где выполняется**: десктопный клиент MoreLogin выполняет это целиком на вашей машине. **Серверной реализации нет**, поэтому никаких предварительных условий по аккаунту, команде или состоянию, кроме открытого в клиенте профиля, не существует, и в облаке ничего не записывается.\n- **Эффект**: ограничен локальными процессами и окнами браузера. Данные профиля, отпечаток и облачный кеш не затрагиваются.\n- **Завершение**: синхронное — клиент отвечает, как только выполнил действие.\n- **Доступность**: только Local API. В Open API аналога нет, потому что у неё нет локального браузера, с которым можно работать. Используйте эндпоинты облачной среды выполнения.\n- **Примечание**: поскольку этим владеет клиент, структура ответа зависит от версии установленного клиента, а не от контракта службы.",
        "tags": [
          "Runtime"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "envId": {
                    "description": "Идентификатор среды или серийный номер — необходимо указать хотя бы один из них; если указаны оба, приоритет имеет envId.",
                    "type": "string"
                  },
                  "uniqueId": {
                    "description": "Серийный номер среды — необходимо указать хотя бы один из параметров: 'envId' или 'uniqueId'; если указаны оба, приоритет имеет 'envId'.",
                    "type": "integer"
                  }
                }
              },
              "example": {
                "envId": "1869649942658850816",
                "uniqueId": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — объект с полями `envId` и `debugPort`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "envId": {
                          "type": "string"
                        },
                        "debugPort": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "envId",
                        "debugPort"
                      ]
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Уникальный идентификатор запроса; укажите его при обращении в поддержку"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "envId": "1673823102599682",
                    "debugPort": "9222"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/create/quick": {
      "post": {
        "operationId": "createBrowserProfileQuickLocal",
        "summary": "Быстрое создание профиля браузера",
        "deprecated": false,
        "description": "Создаёт от 1 до 200 профилей браузера с одной общей конфигурацией.\n- **Предварительные условия**: в тарифе команды должно остаться достаточно профилей, а суточная квота создания не должна быть исчерпана. `isEncrypt=1` требует, чтобы у команды был настроен ключ шифрования. Firefox доступен только на Windows и macOS. `groupId` уже должен существовать, но если вместо него передать `groupName`, группа будет создана автоматически.\n- **Эффект**: вставляет профили, расходует ёмкость тарифа и увеличивает суточный счётчик создания. Передача данных подключения прокси также может создать запись прокси.\n- **Завершение**: синхронное. `data` содержит ID новых профилей в порядке создания.\n- **Повтор**: не идемпотентен, ключа идемпотентности нет. Вместо повтора подтвердите результат через `/env/page`.\n- **Local API**: ядра-кандидаты фильтруются по версии запущенного клиента для рабочего стола, а одновременные вызовы от одной команды сериализуются блокировкой на уровне команды.\n\nЗадокументированные бизнес-ошибки: `19002`, `19063`, `19064`, `19104`, `19106`, `19107`, `19108`, `19111`, `19112`, `14023`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "tags": [
          "Profiles"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "browserTypeId": {
                    "description": "1: Chrome, 2: Firefox",
                    "type": "integer",
                    "example": 1
                  },
                  "groupId": {
                    "description": "Идентификатор группы среды; по умолчанию: ungrouped (0)",
                    "type": "string",
                    "example": "0"
                  },
                  "groupName": {
                    "description": "Название группы (макс. 50 символов). Если указано, система сначала проверяет groupId: если найдена действительная группа, она используется; в противном случае выполняется поиск по groupName. Если группа с таким именем существует, она используется; если нет — создаётся новая. Каждая команда ограничена 1 000 группами.",
                    "type": "string",
                    "maxLength": 50,
                    "example": ""
                  },
                  "isEncrypt": {
                    "description": "Включить сквозное шифрование? 0: Нет, 1: Да; по умолчанию: 0",
                    "type": "integer"
                  },
                  "operatorSystemId": {
                    "description": "Тип ОС: 1: Windows, 2: macOS, 3: Android, 4: iOS",
                    "type": "integer",
                    "example": 1
                  },
                  "quantity": {
                    "description": "Количество создаваемых сред; диапазон: [1–50]",
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 50,
                    "example": 1
                  },
                  "browserCore": {
                    "description": "Версия ядра браузера; по умолчанию: 0 (автоматическое сопоставление). Доступные версии можно получить через '/api/env/advanced/ua/versions'.",
                    "type": "integer",
                    "example": 140
                  },
                  "proxy": {
                    "type": "object",
                    "properties": {
                      "proxyId": {
                        "description": "Идентификатор прокси",
                        "type": "string"
                      },
                      "proxyName": {
                        "description": "Название прокси (максимум 600 символов)",
                        "type": "string"
                      },
                      "proxyType": {
                        "description": "Тип прокси: 0 — http, 1 — https. Не может быть пустым, если proxyProvider равен 7/8.",
                        "type": "integer"
                      },
                      "proxyProvider": {
                        "description": "Прокси-Сервисы: 0: http, 1: https, 2: socks5, 3: ssh, 4: Oxylabs, 5: Proxys.io, 7: Luminati, 8: Lumauto, 9: Oxylabsauto, 10: Trojan, 11: Shadowsocks, 13: ABCPROXY, 14: LunaProxy, 15: IPHTML, 16: PiaProxy, 17: 922S5, 18: 360Proxy",
                        "type": "string"
                      },
                      "proxyIp": {
                        "description": "IP-адрес прокси. Может быть пустым, если proxyProvider равен 16/17/18; для других значений требуется.",
                        "type": "string"
                      },
                      "proxyPort": {
                        "description": "Порт прокси (допускаются только номера от 1 до 65535). Может быть пустым, если proxyProvider равен 16/17/18; для других портов он обязателен.",
                        "type": "integer"
                      },
                      "username": {
                        "description": "Имя пользователя (максимум 200 символов)",
                        "type": "string"
                      },
                      "password": {
                        "description": "Пароль (максимум 100 символов)",
                        "type": "string"
                      },
                      "refreshUrl": {
                        "description": "Обновить URL",
                        "type": "string"
                      },
                      "country": {
                        "description": "Страна (конкретные коды стран см. в приложении). Обязательно, если proxyProvider равен 16/17/18.",
                        "type": "string"
                      },
                      "city": {
                        "description": "Город",
                        "type": "string"
                      },
                      "state": {
                        "description": "Штат/Провинция",
                        "type": "string"
                      },
                      "encryptionType": {
                        "description": "Метод шифрования. Не может быть пустым, если proxyProvider равен 11. 1: aes-128-gcm, 2: aes-192-gcm, 3: aes-256-gcm, 4: aes-128-cfb, 5: aes-192-cfb, 6: aes-256-cfb, 7: aes-128-ctr, 8: aes-192-ctr, 9: aes-256-ctr, 10: rc4-md5, 11: chacha20-ietf, 12: xchacha20, 13: chacha20-ietf-poly1305, 14: xchacha20-ietf-poly1305",
                        "type": "integer"
                      },
                      "ipMonitor": {
                        "description": "Включить мониторинг изменений IP-адреса? true: Вкл., false: Выкл.",
                        "type": "boolean"
                      },
                      "ipChangeAction": {
                        "description": "Мониторинг изменения IP-адреса: 0: Блокировка доступа, 1: Предупреждение",
                        "type": "integer"
                      }
                    },
                    "description": "Прокси"
                  }
                },
                "required": [
                  "browserTypeId",
                  "operatorSystemId",
                  "quantity"
                ]
              },
              "example": {
                "browserTypeId": 1,
                "operatorSystemId": 1,
                "quantity": 1
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — массив значений string; пустой массив, если возвращать нечего.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    "string"
                  ],
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/create/advanced": {
      "post": {
        "operationId": "createBrowserProfileAdvancedLocal",
        "summary": "Расширенные настройки создания профиля браузера",
        "deprecated": false,
        "description": "Создаёт один профиль браузера с полной конфигурацией отпечатка.\n- **Предварительные условия**: те же проверки тарифа и суточной квоты, что и при быстром создании. Имя профиля должно быть уникальным в команде, координаты должны находиться вне материкового Китая, а `advancedSetting.ua` должен согласовываться с `uaVersion`. Если вы указываете `proxyId`, он уже должен существовать в команде.\n- **Эффект**: вставляет профиль, его учётные данные (зашифрованные при хранении) и конфигурацию после запуска; расходует ёмкость тарифа и суточный счётчик создания. Пользовательский URL платформы также создаёт запись сайта.\n- **Завершение**: синхронное. `data` содержит ID нового профиля.\n- **Повтор**: не идемпотентен. Второй вызов с тем же явно указанным `envName` не пройдёт проверку уникальности; без имени он создаст дубликат. Ключа идемпотентности нет. Не повторяйте слепо после таймаута: сначала запросите состояние.\n- **Local API**: ядра-кандидаты фильтруются по версии запущенного клиента для рабочего стола, а одновременные вызовы от одной команды сериализуются блокировкой на уровне команды.\n\nЗадокументированные бизнес-ошибки: `19001`, `19002`, `19004`, `19005`, `19063`, `19064`, `19100`, `19101`, `19102`, `19103`, `19104`, `19105`, `19106`, `19107`, `19108`, `19109`, `19110`, `19111`, `19112`, `19141`, `19175`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "tags": [
          "Profiles"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateEnvironmentRequest"
              },
              "example": {
                "browserTypeId": 1,
                "operatorSystemId": 1,
                "isEncrypt": 1
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — одно значение типа string.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "string"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": "string",
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/update": {
      "post": {
        "operationId": "updateBrowserProfileLocal",
        "summary": "Изменить профиль браузера",
        "deprecated": false,
        "description": "Обновляет существующий профиль браузера. Изменяются только поля, присутствующие в запросе.\n- **Предварительные условия**: профиль должен существовать в команде. Профили со сквозным шифрованием обновить нельзя. Операционную систему и тип браузера изменить нельзя. Запущенный профиль обновить можно.\n- **Эффект**: записывает запись профиля, его расширенные настройки и cookie, а также объединяет расширенные настройки отпечатка (существующие значения сохраняются, если не перезаписаны).\n- **Завершение**: синхронное.\n- **Повтор**: безопасно повторять с тем же телом запроса. Учтите, что оптимистичной блокировки нет: при одновременных обновлениях одного профиля побеждает последняя запись, а объединение отпечатка сначала читает, потом записывает, поэтому параллельные вызовы могут потерять изменения.\n\nЗадокументированные бизнес-ошибки: `19001`, `19039`, `19104`, `19105`, `19106`, `19107`, `19108`, `19142`, `19159`, `19160`, `19175`, `19193`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "tags": [
          "Profiles"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateEnvironmentRequest"
              },
              "example": {
                "browserTypeId": 1,
                "operatorSystemId": 1,
                "isEncrypt": 1,
                "envId": "1661515884160372"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` для этой операции всегда null; результат передаётся через `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "null"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/removeToRecycleBin/batch": {
      "post": {
        "summary": "Удалить профиль браузера",
        "operationId": "batchDeleteBrowserProfilesUsingPOST",
        "deprecated": false,
        "description": "Перемещает один или несколько профилей браузера в корзину.\n- **Предварительные условия**: профиль не должен уже находиться в корзине, не должен быть запущен и не должен находиться в процессе передачи. Сначала закройте браузер.\n- **Эффект**: это логическое удаление. Запись, отпечаток и облачный кеш сохраняются, а профиль помечается как перемещённый в корзину с отметкой времени. Ёмкость тарифа освобождается сразу, но суточный счётчик создания не возвращается.\n- **Завершение**: синхронное.\n- **Восстановление**: восстановление из корзины на поверхности API не предоставляется — используйте клиент MoreLogin или веб-консоль.\n- **Повтор**: повторный вызов сообщит, что профиль уже удалён; дважды удалить его нельзя.",
        "tags": [
          "Profiles"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "envIds"
                ],
                "properties": {
                  "envIds": {
                    "type": "array",
                    "description": "Список идентификаторов среды (профиля браузера) для удаления.",
                    "items": {
                      "type": "string",
                      "example": "1868548141708648448"
                    },
                    "minItems": 1,
                    "example": [
                      "1868548141708648448",
                      "1868548141708648449"
                    ]
                  },
                  "removeEnvData": {
                    "type": "boolean",
                    "description": "Также удалять локальные конфигурационные файлы?\nПоддерживается в версии 2.28.0 и выше.\n\n",
                    "default": false,
                    "example": false
                  }
                }
              },
              "example": {
                "envIds": [
                  "1868548141708648448"
                ],
                "removeEnvData": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — одно значение типа boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/page": {
      "post": {
        "summary": "Получите список профилей браузера",
        "operationId": "listBrowserProfilesUsingPOST",
        "deprecated": false,
        "description": "Постранично выводит профили браузера, видимые аутентифицированному участнику.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Фильтрация**: `keyword` сопоставляется с именем профиля, примечанием, названием метки и названием группы. `groupId` равный `0` означает «без группы».\n- **Примечание**: пароли прокси не возвращаются обычным участникам, а также для платформенных и динамических прокси.",
        "tags": [
          "Profiles"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "envName": {
                    "type": "string",
                    "description": "Фильтрация по имени среды (профиля). Пустая строка возвращает все варианты.",
                    "example": ""
                  },
                  "groupId": {
                    "type": "string",
                    "description": "Фильтруйте по идентификатору группы. Используйте 0 для профилей, не входящих в группу.",
                    "default": 0,
                    "example": "0"
                  },
                  "envId": {
                    "type": "string",
                    "description": "Фильтрация по конкретному идентификатору среды.\nЕсли указан, другие фильтры могут быть проигнорированы.\n\n",
                    "example": "1869988538611834880"
                  },
                  "pageNo": {
                    "type": "integer",
                    "description": "Номер страницы (указатель от 1).",
                    "default": 1,
                    "minimum": 1,
                    "example": 1
                  },
                  "pageSize": {
                    "type": "integer",
                    "description": "Количество элементов на странице.",
                    "default": 10,
                    "minimum": 1,
                    "maximum": 100,
                    "example": 10
                  }
                }
              },
              "example": {
                "pageNo": 1,
                "pageSize": 10
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data.dataList` содержит записи запрошенной страницы и является пустым массивом при отсутствии совпадений; `data.total`, `data.current` и `data.pages` описывают постраничную разбивку.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "total": {
                          "type": "string"
                        },
                        "current": {
                          "type": "string"
                        },
                        "pages": {
                          "type": "string"
                        },
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "description": "ID профиля браузера"
                              },
                              "envName": {
                                "type": "string",
                                "description": "Имя профиля"
                              },
                              "groupId": {
                                "type": "string",
                                "description": "ID группы"
                              },
                              "groupName": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "description": "Название группы. `null`, если профиль не входит ни в одну группу"
                              },
                              "tagInfos": {
                                "type": "array",
                                "description": "Сведения о тегах. Пустой массив, если теги не назначены",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string",
                                      "description": "Идентификатор тега"
                                    },
                                    "tagName": {
                                      "type": "string",
                                      "description": "Название тега"
                                    }
                                  },
                                  "required": [
                                    "id",
                                    "tagName"
                                  ]
                                }
                              },
                              "envRemark": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "description": "Примечание к профилю"
                              },
                              "proxyId": {
                                "type": "string",
                                "description": "ID прокси. `0` означает без прокси"
                              },
                              "proxy": {
                                "type": [
                                  "object",
                                  "null"
                                ],
                                "description": "Конфигурация прокси. `null` когда прокси не назначен",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "description": "ID прокси"
                                  },
                                  "proxyName": {
                                    "type": "string",
                                    "description": "Имя прокси"
                                  },
                                  "proxyType": {
                                    "type": "integer",
                                    "description": "Тип прокси"
                                  },
                                  "proxyProvider": {
                                    "type": "integer",
                                    "description": "Тип прокси"
                                  },
                                  "proxyCategoryType": {
                                    "type": "integer",
                                    "description": "Тип категории прокси"
                                  },
                                  "proxyCheckStatus": {
                                    "type": "integer",
                                    "description": "Статус проверки прокси"
                                  },
                                  "proxyStatus": {
                                    "type": "integer",
                                    "description": "Статус прокси"
                                  },
                                  "state": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Штат или область прокси. Приоритет у определённого местоположения выходного IP, затем используется настроенное; возможны null или пустая строка.",
                                    "example": "California"
                                  },
                                  "city": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Город прокси. Приоритет у определённого местоположения выходного IP, затем используется настроенное; возможны null или пустая строка.",
                                    "example": "Los Angeles"
                                  },
                                  "proxyPort": {
                                    "type": [
                                      "integer",
                                      "null"
                                    ],
                                    "format": "int32",
                                    "description": "Порт подключения к прокси; не определяется по имени прокси. Может быть null, если недоступен.",
                                    "example": 1080
                                  },
                                  "proxyIp": {
                                    "type": "string",
                                    "description": "IP-адрес прокси"
                                  },
                                  "exportIp": {
                                    "type": "string",
                                    "description": "IP-адрес экспорта"
                                  },
                                  "countryCode": {
                                    "type": "string",
                                    "description": "Код страны"
                                  },
                                  "expiryTime": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Метка времени истечения срока"
                                  },
                                  "username": {
                                    "type": "string",
                                    "description": "Имя пользователя прокси"
                                  },
                                  "password": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "Пароль прокси"
                                  },
                                  "refreshUrl": {
                                    "type": [
                                      "string",
                                      "null"
                                    ],
                                    "description": "URL обновления прокси"
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "required": [
                        "total",
                        "current",
                        "pages",
                        "dataList"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "total": "1",
                    "current": "1",
                    "pages": "1",
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "envName": "example-name",
                        "groupId": "1673823102599682",
                        "groupName": "example-name",
                        "tagInfos": [
                          {
                            "id": "1673823102599682",
                            "tagName": "example-name"
                          }
                        ],
                        "envRemark": "example remark",
                        "proxyId": "1673823102599682",
                        "proxy": {
                          "id": "1673823102599682",
                          "proxyName": "example-name",
                          "proxyType": 1,
                          "proxyProvider": 1,
                          "proxyCategoryType": 1,
                          "proxyCheckStatus": 1,
                          "proxyStatus": 1,
                          "state": "California",
                          "city": "Los Angeles",
                          "proxyPort": 1080,
                          "proxyIp": "string",
                          "exportIp": "9222",
                          "countryCode": "string",
                          "expiryTime": "2026-09-01 12:00:00",
                          "username": "example-name",
                          "password": "string",
                          "refreshUrl": "https://example.com/resource"
                        }
                      }
                    ]
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/detail": {
      "post": {
        "summary": "Получить сведения о профиле браузера",
        "operationId": "getBrowserProfileDetailsUsingPOST",
        "deprecated": false,
        "description": "Возвращает полную конфигурацию одного профиля браузера, включая расширенные настройки отпечатка и cookie.\n- **Предварительные условия**: профиль должен существовать в команде, а у вызывающего должны быть права на него.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Примечание**: пароли учётных записей и секреты двухфакторной аутентификации возвращаются только владельцу команды либо если профиль не настроен на их скрытие.",
        "tags": [
          "Profiles"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "envId"
                ],
                "properties": {
                  "envId": {
                    "type": "string",
                    "description": "Идентификатор целевой среды (профиля браузера)",
                    "example": "1869988538611834880"
                  }
                }
              },
              "example": {
                "envId": "1869988538611834880"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — объект с полями `id`, `envName`, `browserTypeId`, `operatorSystemId`, `groupId`, `groupName`, ….",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "envName": {
                          "type": "string"
                        },
                        "browserTypeId": {
                          "type": "integer"
                        },
                        "operatorSystemId": {
                          "type": "integer"
                        },
                        "groupId": {
                          "type": "string"
                        },
                        "groupName": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Название группы. `null`, если профиль не входит ни в одну группу"
                        },
                        "tagInfos": {
                          "type": "array",
                          "description": "Сведения о тегах. Пустой массив, если теги не назначены",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "description": "Идентификатор тега"
                              },
                              "tagName": {
                                "type": "string",
                                "description": "Название тега"
                              }
                            },
                            "required": [
                              "id",
                              "tagName"
                            ]
                          }
                        },
                        "proxyId": {
                          "type": "string"
                        },
                        "isEncrypt": {
                          "type": "integer"
                        },
                        "envRemark": {
                          "type": "string"
                        },
                        "uaVersion": {
                          "type": "integer"
                        },
                        "browserCore": {
                          "type": "integer"
                        },
                        "accountInfo": {
                          "type": "object",
                          "properties": {
                            "username": {
                              "type": "string"
                            },
                            "password": {
                              "type": "string"
                            },
                            "siteId": {
                              "type": "string"
                            },
                            "platformId": {
                              "type": "string"
                            },
                            "customerUrl": {
                              "type": "string"
                            },
                            "otpSecret": {
                              "type": "null"
                            }
                          },
                          "required": [
                            "username",
                            "password",
                            "siteId",
                            "platformId",
                            "customerUrl",
                            "otpSecret"
                          ]
                        },
                        "isShowAccount": {
                          "type": "integer"
                        },
                        "afterStartupConfig": {
                          "type": "object",
                          "properties": {
                            "afterStartup": {
                              "type": "integer"
                            },
                            "autoOpenUrls": {
                              "type": "array",
                              "items": {}
                            },
                            "platformUrl": {
                              "type": "null"
                            }
                          },
                          "required": [
                            "afterStartup",
                            "autoOpenUrls",
                            "platformUrl"
                          ]
                        },
                        "startupParams": {
                          "type": "null"
                        },
                        "cookies": {
                          "type": "null"
                        },
                        "advancedSetting": {
                          "type": "object",
                          "properties": {}
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "id": "1673823102599682",
                    "envName": "example-name",
                    "browserTypeId": 1,
                    "operatorSystemId": 1,
                    "groupId": "1673823102599682",
                    "groupName": "example-name",
                    "tagInfos": [
                      {
                        "id": "1673823102599682",
                        "tagName": "example-name"
                      }
                    ],
                    "proxyId": "1673823102599682",
                    "isEncrypt": 1,
                    "envRemark": "example remark",
                    "uaVersion": 1,
                    "browserCore": 1,
                    "accountInfo": {
                      "username": "example-name",
                      "password": "string",
                      "siteId": "1673823102599682",
                      "platformId": "1673823102599682",
                      "customerUrl": "https://example.com/resource",
                      "otpSecret": null
                    },
                    "isShowAccount": 1,
                    "afterStartupConfig": {
                      "afterStartup": 1,
                      "autoOpenUrls": [],
                      "platformUrl": null
                    },
                    "startupParams": null,
                    "cookies": null,
                    "advancedSetting": {}
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/advanced/ua/versions": {
      "get": {
        "operationId": "listAdvancedUaVersionsLocal",
        "summary": "Получить список версий ядра браузера",
        "deprecated": false,
        "description": "Возвращает опубликованные ядра браузеров и мажорные версии user agent.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Содержимое**: поверхность Open API возвращает только опубликованные ядра, тогда как поверхность Local API фильтрует их по версии запущенного клиента, поэтому две поверхности могут возвращать разные наборы. Список меняется по мере публикации новых ядер.\n- **Примечание**: сбой вышестоящей службы даёт пустой список, а не ошибку, поэтому считайте пустой результат неопределённым.\n- **Local API**: список фильтруется по версии запущенного клиента для рабочего стола.",
        "tags": [
          "Fingerprint & Device Config"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Успех. `data` — массив объектов с полями `browserType` и `versions`; пустой массив, если возвращать нечего.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "browserType": {
                            "type": "integer"
                          },
                          "versions": {
                            "type": "array",
                            "items": {
                              "type": "integer"
                            }
                          }
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    {
                      "browserType": 1,
                      "versions": [
                        1
                      ]
                    }
                  ],
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/advanced/ua/get": {
      "post": {
        "summary": "Получить профиль пользователя браузера",
        "operationId": "getBrowserProfileUAUsingPOST",
        "deprecated": false,
        "description": "Генерирует user agent, соответствующий запрошенной операционной системе и производителю браузера.\n- **Предварительные условия**: Firefox допустим только с Windows или macOS, а `osVersion` должен быть одним из поддерживаемых выпусков.\n- **Эффект**: отсутствует, но **результат не детерминирован**: один и тот же запрос каждый раз возвращает другой user agent. Не используйте его как ключ кеша.\n- **Завершение**: синхронное. Повтор безопасен.",
        "tags": [
          "Fingerprint & Device Config"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "os"
                ],
                "properties": {
                  "os": {
                    "type": "integer",
                    "description": "Тип операционной системы.\n\n1 = Windows, 2 = macOS, 3 = Android, 4 = iOS\n\n",
                    "enum": [
                      1,
                      2,
                      3,
                      4
                    ],
                    "example": 1
                  },
                  "osVersion": {
                    "type": "string",
                    "description": "Версия ОС (например, «Windows 11», «macOS 14»).\n\n",
                    "example": "Windows 11"
                  },
                  "vendor": {
                    "type": "integer",
                    "description": "Тип браузера.\n\n1 = Chrome, 2 = Firefox\n\n",
                    "enum": [
                      1,
                      2
                    ],
                    "example": 1
                  }
                }
              },
              "example": {
                "os": 1,
                "osVersion": "Windows 11",
                "vendor": 1
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` для этой операции всегда null; результат передаётся через `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "null"
                    },
                    "resolution": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "value": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "value"
                      ]
                    },
                    "ua": {
                      "type": "string"
                    },
                    "requestId": {
                      "type": "string"
                    },
                    "error": {
                      "type": "object",
                      "properties": {}
                    }
                  },
                  "required": [
                    "resolution",
                    "ua"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": null,
                  "resolution": {
                    "id": "1673823102599682",
                    "value": "string"
                  },
                  "ua": "string",
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "error": {}
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/base/resolution/list": {
      "post": {
        "summary": "Получить разрешение",
        "operationId": "listResolutionsUsingPOST",
        "deprecated": false,
        "description": "Возвращает разрешения экрана, доступные для user agent или операционной системы.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Содержимое**: данные отдаёт служба базовых данных отпечатков, поэтому список меняется по мере обновления этих данных.",
        "tags": [
          "Fingerprint & Device Config"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "os": {
                    "type": "integer",
                    "description": "Тип ОС (1=Windows, 2=macOS, 3=Android, 4=iOS)",
                    "example": 1
                  },
                  "ua": {
                    "type": "string",
                    "description": "Строка User-Agent (необязательно)",
                    "example": ""
                  }
                },
                "required": [
                  "os"
                ]
              },
              "example": {
                "os": 1,
                "ua": ""
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — массив объектов с полями `id` и `value`; пустой массив, если возвращать нечего.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "value": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    {
                      "id": "1673823102599682",
                      "value": "string"
                    }
                  ],
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/system/platform/list": {
      "get": {
        "operationId": "listSystemPlatformsLocal",
        "summary": "Получите настраиваемые платформы",
        "deprecated": false,
        "description": "Возвращает платформы и сайты, которые можно привязать к профилю браузера.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Содержимое**: системные платформы и сайты, помеченные для отображения, плюс собственные пользовательские URL сайтов вызывающей команды. Поэтому список меняется и когда MoreLogin публикует новые платформы, и когда ваша команда добавляет пользовательский URL через расширенное создание.",
        "tags": [
          "Fingerprint & Device Config"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Успех. `data` — массив объектов с полями `id`, `categoryId`, `groupName`, `groups`, `isCustomer`, `logo`, …; пустой массив, если возвращать нечего.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "description": "Идентификатор платформы"
                          },
                          "categoryId": {
                            "type": "string",
                            "description": "Идентификатор категории"
                          },
                          "groupName": {
                            "type": "string",
                            "description": "Название группы"
                          },
                          "groups": {
                            "type": "string",
                            "description": "Группа 0: Amazon"
                          },
                          "isCustomer": {
                            "type": "boolean",
                            "description": "Стоит ли настраивать платформу?"
                          },
                          "logo": {
                            "type": "string",
                            "description": "логотип платформы"
                          },
                          "name": {
                            "type": "string",
                            "description": "Название платформы"
                          },
                          "orderNo": {
                            "type": "string",
                            "description": "Номер сортировки"
                          },
                          "sites": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string",
                                  "description": "Идентификатор сайта"
                                },
                                "host": {
                                  "type": "string",
                                  "description": "Доменное имя сайта"
                                },
                                "name": {
                                  "type": "string",
                                  "description": "Размер"
                                },
                                "nameBak": {
                                  "type": "string",
                                  "description": "Размер имени резервной копии"
                                },
                                "logo": {
                                  "type": "string",
                                  "description": "Логотип"
                                },
                                "url": {
                                  "type": "string",
                                  "description": "Размер URL"
                                },
                                "isDefault": {
                                  "type": "boolean"
                                },
                                "country": {
                                  "type": "string",
                                  "description": "Страна"
                                }
                              },
                              "required": [
                                "id",
                                "host",
                                "name",
                                "logo",
                                "nameBak",
                                "url",
                                "isDefault",
                                "country"
                              ]
                            },
                            "description": "Информация о сайтах"
                          }
                        },
                        "required": [
                          "id",
                          "categoryId",
                          "groupName",
                          "groups",
                          "isCustomer",
                          "logo",
                          "name",
                          "orderNo",
                          "sites"
                        ]
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    {
                      "id": "1673823102599682",
                      "categoryId": "1673823102599682",
                      "groupName": "example-name",
                      "groups": "string",
                      "isCustomer": true,
                      "logo": "string",
                      "name": "example-name",
                      "orderNo": "string",
                      "sites": [
                        {
                          "id": "1673823102599682",
                          "host": "string",
                          "name": "example-name",
                          "nameBak": "example-name",
                          "logo": "string",
                          "url": "https://example.com/resource",
                          "isDefault": true,
                          "country": "string"
                        }
                      ]
                    }
                  ],
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/lock/query": {
      "post": {
        "summary": "Получить статус блокировки безопасности браузера",
        "operationId": "queryBrowserLockStatusUsingPOST",
        "deprecated": false,
        "description": "Сообщает, занят ли профиль браузера в данный момент другим участником команды.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Семантика**: значение `true` требует выполнения всех условий: в команде включена функция блокировки безопасности, блокировка существует, и удерживает её кто-то, кроме вызывающего. Блокировка удерживается за участником и имеет срок истечения, поэтому может снять себя сама.",
        "tags": [
          "Profiles"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "envId"
                ],
                "properties": {
                  "envId": {
                    "type": "string",
                    "description": "Уникальный идентификатор среды (профиля браузера).",
                    "example": "1869988538611834880"
                  }
                }
              },
              "example": {
                "envId": "1869988538611834880"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — объект с полями `envId` и `locked`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "envId": {
                          "type": "string"
                        },
                        "locked": {
                          "type": "boolean"
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "envId": "1673823102599682",
                    "locked": true
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/base/list": {
      "post": {
        "summary": "Получите список часовых поясов и языков.",
        "operationId": "listTimezoneAndLanguageUsingPOST",
        "deprecated": false,
        "description": "Возвращает часовые пояса и языки, доступные для профилей браузера.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Примечание**: сейчас ответ не зависит от тела запроса: служба не передаёт запрошенные операционную систему и язык дальше, поэтому возвращается один и тот же список независимо от входных данных.",
        "tags": [
          "Fingerprint & Device Config"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "os"
                ],
                "properties": {
                  "os": {
                    "type": "integer",
                    "description": "Тип операционной системы.\n\n1 = Windows, 2 = macOS, 3 = Android, 4 = iOS\n\n",
                    "enum": [
                      1,
                      2,
                      3,
                      4
                    ],
                    "example": 1
                  }
                }
              },
              "example": {
                "os": 1
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — объект с полями `time_zone_list` и `language_list`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "time_zone_list": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "value": {
                                "type": "string"
                              }
                            }
                          }
                        },
                        "language_list": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "value": {
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "time_zone_list": [
                      {
                        "id": "1673823102599682",
                        "value": "string"
                      }
                    ],
                    "language_list": [
                      {
                        "id": "1673823102599682",
                        "value": "string"
                      }
                    ]
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/removeLocalCache": {
      "post": {
        "summary": "Очистить локальный кэш профиля",
        "operationId": "clearLocalProfileCacheUsingPOST",
        "deprecated": false,
        "description": "Просит локальный клиент MoreLogin очистить кешированные данные профиля браузера.\n- **Предварительные условия**: укажите профиль через `envId` или `uniqueId` и выберите хотя бы один тип кеша. Для профилей Firefox нужно выбрать сразу все типы.\n- **Эффект**: служба проверяет запрос и записывает его; **само удаление выполняет клиент для рабочего стола на локальном диске.** Облачный кеш не затрагивается — для него используйте эндпоинт облачного кеша.\n- **Завершение**: ответ подтверждает, что служба приняла запрос, а не что локальные файлы удалены. Эндпоинта, сообщающего о состоянии локального диска, нет.",
        "tags": [
          "Cache & Window"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "envId"
                ],
                "properties": {
                  "envId": {
                    "type": "string",
                    "description": "Идентификатор среды. Необходимо указать ровно один из вариантов: `envId` или `uniqueId`.\n\n"
                  },
                  "localStorage": {
                    "type": "boolean",
                    "description": "Очистить локальное хранилище. По умолчанию: false.",
                    "default": false
                  },
                  "indexedDB": {
                    "type": "boolean",
                    "description": "Очистить индексированную базу данных. Значение по умолчанию: false.",
                    "default": false
                  },
                  "cookie": {
                    "type": "boolean",
                    "description": "Очистить файлы cookie. По умолчанию: false.",
                    "default": false
                  },
                  "extension": {
                    "type": "boolean",
                    "description": "Очистить данные расширения. Если `extensionFile` не указан,\nочищает как имя расширения, так и его данные. По умолчанию: false.\n\n",
                    "default": false
                  },
                  "extensionFile": {
                    "type": "boolean",
                    "description": "Очистка файлов расширений (действует с версии 3.36).\n\n",
                    "default": false
                  }
                }
              },
              "example": {
                "envId": "1924340272932134912",
                "localStorage": false,
                "indexedDB": false,
                "cookie": false,
                "extension": false,
                "extensionFile": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — объект с полями `envId`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "envId": {
                          "type": "string"
                        }
                      }
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Уникальный идентификатор запроса; укажите его при обращении в поддержку"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "envId": "1673823102599682"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/api/env/cache/cleanCloud": {
      "post": {
        "operationId": "cleanCloudCacheLocal",
        "summary": "Облачный кэш для чистой среды",
        "deprecated": false,
        "description": "Очищает облачный кеш профиля браузера.\n- **Предварительные условия**: укажите профиль через `envId` или `uniqueId`, выберите хотя бы один класс кеша, и профиль не должен находиться в процессе передачи. Локальный кеш клиента не затрагивается.\n- **Эффект**: очистка общего класса удаляет облачные LocalStorage, IndexedDB и данные расширений, отвязывает расширения профиля и **сбрасывает тип шифрования профиля**; очистка cookie сбрасывает тип шифрования cookie. Оба изменения сохраняются, поэтому зашифрованный профиль становится незашифрованным для очищенного класса.\n- **Завершение**: синхронное — облачная служба хранения уже приняла запрос и ответила до возврата ответа. Идентификатора задачи для опроса нет.\n\nЗадокументированные бизнес-ошибки: `19039`, `19149`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "tags": [
          "Cache & Window"
        ],
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "description": "Язык запроса по умолчанию",
            "required": false,
            "example": "zh-CN",
            "schema": {
              "type": "string",
              "default": "zh-CN"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "cookie": {
                    "description": "Очистить ли файлы cookie",
                    "type": "boolean"
                  },
                  "envId": {
                    "description": "Идентификатор среды (необходимо указать серийный номер).",
                    "type": "string"
                  },
                  "others": {
                    "description": "Очистить ли другой кэш",
                    "type": "boolean"
                  },
                  "uniqueId": {
                    "description": "Серийный номер (необходимо указать идентификатор среды).",
                    "type": "integer"
                  }
                }
              },
              "example": {
                "cookie": true,
                "envId": "1661515884160372",
                "others": true
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успех. `data` для этой операции всегда null; результат передаётся через `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "null"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": null,
                  "requestId": "ca3b32431c264b6c94187fde14d23229"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/fingerprint/refresh": {
      "post": {
        "summary": "Обновить отпечаток пальца",
        "operationId": "refreshFingerprintUsingPOST",
        "deprecated": false,
        "description": "Перегенерирует отпечаток профиля браузера.\n- **Предварительные условия**: укажите профиль через `envId` или `uniqueId`. Зашифрованные профили отклоняются. Запущенный профиль не блокируется, но новый отпечаток применяется со следующего запуска.\n- **Эффект**: генерирует новый отпечаток, случайным образом задаёт имя хоста и MAC-адрес и заново подбирает ядро браузера. Значения, явно указанные в запросе, имеют приоритет над сгенерированными.\n- **Завершение**: синхронное.\n- **Повтор**: **никогда не повторяйте автоматически.** Каждый вызов даёт другой случайный отпечаток, поэтому слепой повтор после таймаута изменит профиль во второй раз. Сначала сравните через `/env/detail`.\n\nЗадокументированные бизнес-ошибки: `19039`, `19104`, `19105`, `19106`, `19107`, `19108`, `19111`, `19142`, `19193`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "tags": [
          "Fingerprint & Device Config"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "envId"
                ],
                "properties": {
                  "envId": {
                    "type": "string",
                    "description": "Идентификатор профиля (идентификатор среды). Необходимо указать ровно один из вариантов: `envId` или `uniqueId`.\n\n"
                  },
                  "uniqueId": {
                    "type": "string",
                    "description": "Серийный номер профиля (уникальный идентификатор). Необходимо указать ровно один из вариантов: `envId` или `uniqueId`.\n\n"
                  },
                  "uaVersion": {
                    "type": "integer",
                    "description": "Целевая версия User-Agent (например, Chrome 129).\nЕсли не указано, используется текущая версия UA из профиля.\n\n",
                    "example": 129
                  },
                  "browserTypeId": {
                    "type": "integer",
                    "description": "Тип браузера. 1 = Chrome, 2 = Firefox.\n\n",
                    "enum": [
                      1,
                      2
                    ]
                  },
                  "operatorSystemId": {
                    "type": "integer",
                    "description": "Тип операционной системы. 1 = Windows, 2 = macOS, 3 = Android, 4 = iOS.\n\n",
                    "enum": [
                      1,
                      2,
                      3,
                      4
                    ]
                  },
                  "advancedSetting": {
                    "$ref": "#/components/schemas/AdvancedSetting"
                  }
                }
              },
              "example": {
                "envId": "1869988538611834880",
                "uniqueId": "",
                "uaVersion": 129,
                "browserTypeId": 1,
                "operatorSystemId": 2,
                "advancedSetting": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` для этой операции всегда null; результат передаётся через `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "null"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/status": {
      "post": {
        "operationId": "getBrowserProfileStatusLocal",
        "summary": "Получить информацию о состоянии работы профиля браузера",
        "deprecated": false,
        "description": "Возвращает актуальное состояние выполнения одного или нескольких профилей браузера.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Значения**: каждый профиль сообщает либо `running`, либо `stopped`. Это сигнал завершения для операций запуска и закрытия.\n- **Примечание**: неразрешённые идентификаторы отбрасываются молча; вызов завершается ошибкой только если не разрешается ни один из них.",
        "tags": [
          "Runtime"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "envId": {
                    "description": "Идентификатор среды браузера",
                    "type": "string"
                  }
                },
                "required": [
                  "envId"
                ]
              },
              "example": {
                "envId": "1957985601221750784"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — объект с полями `envId`, `debugPort`, `status`, `localStatus` и `webdriver`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "envId": {
                          "type": "string",
                          "description": "идентификатор среды"
                        },
                        "status": {
                          "type": "string"
                        },
                        "localStatus": {
                          "type": "string"
                        },
                        "debugPort": {
                          "type": "string"
                        },
                        "webdriver": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "envId",
                        "debugPort",
                        "status",
                        "localStatus",
                        "webdriver"
                      ]
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Уникальный идентификатор запроса; укажите его при обращении в поддержку"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "envId": "1673823102599682",
                    "status": "0",
                    "localStatus": "0",
                    "debugPort": "9222",
                    "webdriver": "string"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/getAllScreen": {
      "post": {
        "operationId": "getAllBrowserScreensLocal",
        "summary": "Получить список экранов",
        "deprecated": false,
        "description": "Выводит экраны, на которых клиент может размещать окна.\n\n- **Где выполняется**: десктопный клиент MoreLogin выполняет это целиком на вашей машине. **Серверной реализации нет**, поэтому никаких предварительных условий по аккаунту, команде или состоянию, кроме открытого в клиенте профиля, не существует, и в облаке ничего не записывается.\n- **Эффект**: ограничен локальными процессами и окнами браузера. Данные профиля, отпечаток и облачный кеш не затрагиваются.\n- **Завершение**: синхронное — клиент отвечает, как только выполнил действие.\n- **Доступность**: только Local API. В Open API аналога нет, потому что у неё нет локального браузера, с которым можно работать. Используйте эндпоинты облачной среды выполнения.\n- **Примечание**: поскольку этим владеет клиент, структура ответа зависит от версии установленного клиента, а не от контракта службы.",
        "tags": [
          "Cache & Window"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {}
              },
              "example": {}
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — массив объектов с полями `id`, `scaleFactor`, `width`, `height`, `internal`, `x`, …; пустой массив, если возвращать нечего.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "description": "Уникальный идентификатор экрана"
                          },
                          "scaleFactor": {
                            "type": "integer",
                            "description": "Коэффициент масштабирования экрана"
                          },
                          "width": {
                            "type": "integer",
                            "description": "Ширина экрана в пикселях"
                          },
                          "height": {
                            "type": "integer",
                            "description": "высота пикселя экрана"
                          },
                          "internal": {
                            "type": "boolean",
                            "description": "Указывает, является ли экран встроенным."
                          },
                          "x": {
                            "type": "integer",
                            "description": "Положение экрана по оси X в виртуальной системе координат"
                          },
                          "y": {
                            "type": "integer",
                            "description": "Положение экрана по оси Y в виртуальной системе координат."
                          },
                          "current": {
                            "type": "boolean",
                            "description": "Идентификатор текущего активного экрана"
                          },
                          "realWidth": {
                            "type": "integer",
                            "description": "Фактическая физическая ширина экрана"
                          },
                          "realHeight": {
                            "type": "integer",
                            "description": "Фактическая физическая высота экрана"
                          },
                          "workAreaWidth": {
                            "type": "integer",
                            "description": "Ширина рабочей области экрана в пикселях"
                          },
                          "workAreaHeight": {
                            "type": "integer",
                            "description": "Высота рабочей области экрана в пикселях"
                          },
                          "workAreaRealWidth": {
                            "type": "integer",
                            "description": "Фактическая физическая ширина рабочей зоны"
                          },
                          "workAreaRealHeight": {
                            "type": "integer",
                            "description": "Фактическая физическая высота рабочей зоны"
                          },
                          "rectWorkAreaWidth": {
                            "type": "integer",
                            "description": "Скорректированная ширина рабочей зоны"
                          },
                          "rectWorkAreaHeight": {
                            "type": "integer",
                            "description": "Скорректированная высота рабочей зоны"
                          },
                          "rectWorkAreaRealWidth": {
                            "type": "integer",
                            "description": "Фактическая физическая ширина скорректированной рабочей зоны"
                          },
                          "rectWorkAreaRealHeight": {
                            "type": "integer",
                            "description": "Фактическая физическая высота скорректированной рабочей зоны."
                          },
                          "rectWorkAreaX": {
                            "type": "integer",
                            "description": "Положение скорректированной рабочей области по оси X."
                          },
                          "rectWorkAreaY": {
                            "type": "integer",
                            "description": "Положение скорректированной рабочей области по оси Y."
                          },
                          "depthPerComponent": {
                            "type": "integer",
                            "description": "Точность цветопередачи на пиксель экрана"
                          },
                          "isPrimaryScreen": {
                            "type": "boolean",
                            "description": "Является ли экран основным дисплеем"
                          }
                        }
                      }
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Уникальный идентификатор запроса; укажите его при обращении в поддержку"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    {
                      "width": 1920,
                      "height": 1080,
                      "internal": false,
                      "x": 0,
                      "y": 0,
                      "current": true,
                      "scaleFactor": 1,
                      "id": "2528732444",
                      "realWidth": 1920,
                      "realHeight": 1080,
                      "workAreaWidth": 1920,
                      "workAreaHeight": 1032,
                      "rectWorkAreaWidth": 1920,
                      "rectWorkAreaHeight": 1032,
                      "rectWorkAreaRealWidth": 1920,
                      "rectWorkAreaRealHeight": 1032,
                      "rectWorkAreaX": 0,
                      "rectWorkAreaY": 0,
                      "depthPerComponent": 8,
                      "workAreaRealWidth": 1920,
                      "workAreaRealHeight": 1032,
                      "isPrimaryScreen": true
                    }
                  ]
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/arrangeWindows": {
      "post": {
        "operationId": "arrangeBrowserWindowsLocal",
        "summary": "Адаптивное расположение окон одним щелчком мыши",
        "deprecated": false,
        "description": "Располагает на экране окна запущенных профилей браузера.\n\n- **Где выполняется**: десктопный клиент MoreLogin выполняет это целиком на вашей машине. **Серверной реализации нет**, поэтому никаких предварительных условий по аккаунту, команде или состоянию, кроме открытого в клиенте профиля, не существует, и в облаке ничего не записывается.\n- **Эффект**: ограничен локальными процессами и окнами браузера. Данные профиля, отпечаток и облачный кеш не затрагиваются.\n- **Завершение**: синхронное — клиент отвечает, как только выполнил действие.\n- **Доступность**: только Local API. В Open API аналога нет, потому что у неё нет локального браузера, с которым можно работать. Используйте эндпоинты облачной среды выполнения.\n- **Примечание**: поскольку этим владеет клиент, структура ответа зависит от версии установленного клиента, а не от контракта службы.",
        "tags": [
          "Cache & Window"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "arrangeType": {
                    "description": "Тип расположения: 1 — плиточное, 2 — штабелированное, по умолчанию — плиточное, если не указано иное.",
                    "type": "integer"
                  },
                  "envIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Если идентификаторы среды не указаны, по умолчанию выбираются все окна среды."
                  },
                  "screenIds": {
                    "type": "array",
                    "items": {
                      "type": "integer"
                    },
                    "description": "Идентификаторы экранов, тип массива; если не указано, расположить на экране в том месте, где находится курсор мыши."
                  }
                }
              },
              "example": {
                "arrangeType": 1,
                "envIds": [
                  "string"
                ],
                "screenIds": [
                  1
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Стандартный конверт ответа. Результат передаётся через `code`; дополнительная полезная нагрузка для этой операции не документирована.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Сообщение об ошибке; null при успехе"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Уникальный идентификатор запроса; укажите его при обращении в поддержку"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/setGroup/batch": {
      "post": {
        "operationId": "setBrowserGroupsBatchLocal",
        "summary": "Группа пакетного изменения профилей",
        "deprecated": false,
        "description": "Перемещает профили браузера в группу по её названию.\n- **Предварительные условия**: укажите хотя бы одно из `envIds` или `uniqueIds`; `groupName` обязателен и не длиннее 50 символов. Убрать профиль из группы через этот эндпоинт невозможно.\n- **Эффект**: если названия не существует, группа создаётся автоматически, что **учитывается в лимите 1000 групп на команду** и приводит к ошибке после его достижения. Профиль принадлежит ровно одной группе, поэтому предыдущая группа заменяется. Если ваша команда выдаёт доступ по группам, созданная здесь группа также будет выдана вам.\n- **Завершение**: синхронное. Создание групп сериализуется по команде, поэтому одновременные вызовы с новым названием не создадут дубликатов.",
        "tags": [
          "Profiles"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "envIds": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "description": "Идентификаторы среды, тип массива, необходимо выбрать один из вариантов: этот или серийные идентификаторы."
                    }
                  },
                  "groupName": {
                    "description": "Название группы, строковый тип, обязательный",
                    "type": "string"
                  },
                  "uniqueIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Серийные идентификаторы, тип массива, необходимо выбрать один из вариантов: этот или идентификаторы среды."
                  }
                },
                "required": [
                  "groupName"
                ]
              },
              "example": {
                "groupName": "example-name"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — одно значение типа boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "a416bb98f6d240c3bb79e7b2cf6e7ad4"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/setProxy/batch": {
      "post": {
        "operationId": "setBrowserProxiesBatchLocal",
        "summary": "Пакетное изменение профилей через прокси",
        "deprecated": false,
        "description": "Привязывает прокси к нескольким профилям браузера.\n- **Предварительные условия**: укажите хотя бы одно из `envIds` или `uniqueIds`. Если вы указываете `proxyId`, он уже должен существовать в команде, иначе вызов отклоняется, а не создаёт прокси.\n- **Эффект**: записывает `proxyId` в каждый профиль. Если `proxyId` опущен или равен `0`, повторно используется существующий прокси с полностью совпадающими данными подключения, а если совпадений нет, **в вызывающей команде создаётся новая запись прокси**.\n- **Завершение**: синхронное. Запущенные браузеры сохраняют тот прокси, с которым были запущены.\n- **Повтор**: повторная привязка того же `proxyId` идемпотентна, но повторение вызова с «сырыми» данными подключения может каждый раз создавать ещё одну запись прокси, когда дедупликация не срабатывает.\n\nЗадокументированные бизнес-ошибки: `19106`, `19193`, `14023`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "tags": [
          "Profiles"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "envIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Выберите один из вариантов с серийными номерами (необходимо указать один из них)."
                  },
                  "proxy": {
                    "type": "object",
                    "properties": {
                      "city": {
                        "type": "string",
                        "description": "Город"
                      },
                      "state": {
                        "type": "string",
                        "description": "Штат/Провинция"
                      },
                      "country": {
                        "type": "string",
                        "description": "Страна (конкретные коды стран см. в приложении). Обязательно, если proxyProvider равен 16/17/18."
                      },
                      "encryptionType": {
                        "type": "integer",
                        "description": "Метод шифрования. Не может быть пустым, если proxyProvider равен 11. 1: aes-128-gcm, 2: aes-192-gcm, 3: aes-256-gcm, 4: aes-128-cfb, 5: aes-192-cfb, 6: aes-256-cfb, 7: aes-128-ctr, 8: aes-192-ctr, 9: aes-256-ctr, 10: rc4-md5, 11: chacha20-ietf, 12: xchacha20, 13: chacha20-ietf-poly1305, 14: xchacha20-ietf-poly1305"
                      },
                      "proxyId": {
                        "type": "string",
                        "description": "Идентификатор прокси"
                      },
                      "proxyIp": {
                        "description": "IP-адрес прокси. Может быть пустым, если proxyProvider равен 16/17/18; для других значений требуется.",
                        "type": "string"
                      },
                      "proxyPort": {
                        "type": "integer",
                        "description": "Порт прокси (допускаются только номера от 1 до 65535). Может быть пустым, если proxyProvider равен 16/17/18; для других портов он обязателен."
                      },
                      "proxyType": {
                        "type": "integer",
                        "description": "Тип прокси: 0 — http, 1 — https. Не может быть пустым, если proxyProvider равен 7/8."
                      },
                      "proxyProvider": {
                        "type": "string",
                        "description": "Прокси-Сервисы: 0: http, 1: https, 2: socks5, 3: ssh, 4: Oxylabs, 5: Proxys.io, 7: Luminati, 8: Lumauto, 9: Oxylabsauto, 10: Trojan, 11: Shadowsocks, 13: ABCPROXY, 14: LunaProxy, 15: IPHTML, 16: PiaProxy, 17: 922S5, 18: 360Proxy"
                      },
                      "proxyName": {
                        "type": "string",
                        "description": "Название прокси (максимум 600 символов)"
                      },
                      "password": {
                        "type": "string",
                        "description": "Пароль (максимум 100 символов)"
                      },
                      "refreshUrl": {
                        "type": "string",
                        "description": "Обновить URL"
                      },
                      "ipMonitor": {
                        "type": "boolean",
                        "description": "Включить мониторинг изменений IP-адреса? true: Вкл., false: Выкл."
                      },
                      "ipChangeAction": {
                        "type": "integer",
                        "description": "Мониторинг изменения IP-адреса: 0: Блокировка доступа, 1: Предупреждение"
                      },
                      "username": {
                        "type": "string",
                        "description": "Имя пользователя (максимум 200 символов)"
                      }
                    },
                    "required": [
                      "city",
                      "country",
                      "encryptionType",
                      "ipChangeAction",
                      "ipMonitor",
                      "password",
                      "proxyId",
                      "proxyIp",
                      "proxyName",
                      "proxyPort",
                      "proxyProvider",
                      "proxyType",
                      "refreshUrl",
                      "state",
                      "username"
                    ],
                    "description": "Используется для изменения привязанного прокси для различных сред. Если указан proxyId, выполняется привязка к прокси, представленному этим ID; в противном случае — привязка к вновь добавленному прокси. Если информация о прокси остается неизменной, повторная привязка не происходит (любое изменение proxyIp, proxyPort, proxyType или proxyProvider считается новым прокси, и повторная привязка выполняется успешно)."
                  },
                  "uniqueIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Выберите один из вариантов, указав идентификатор среды (необходимо заполнить одно поле)."
                  }
                },
                "required": [
                  "proxy"
                ]
              },
              "example": {
                "proxy": {
                  "city": "string",
                  "country": "string",
                  "encryptionType": 1,
                  "ipChangeAction": 1,
                  "ipMonitor": true,
                  "password": "string",
                  "proxyId": "1661515884160372",
                  "proxyIp": "string",
                  "proxyName": "example-name",
                  "proxyPort": 1,
                  "proxyProvider": "string",
                  "proxyType": 1,
                  "refreshUrl": "https://example.com/resource",
                  "state": "string",
                  "username": "example-name"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — одно значение типа boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "d57cfecfc6904fcaa57da9f65b2a15fd"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/setRemark/batch": {
      "post": {
        "operationId": "setBrowserRemarksBatchLocal",
        "summary": "Примечание к пакетному изменению профиля",
        "deprecated": false,
        "description": "Задаёт примечание для нескольких профилей браузера. Пустая строка очищает его.\n- **Предварительные условия**: укажите хотя бы одно из `envIds` или `uniqueIds`; у вызывающего должны быть права на каждый профиль.\n- **Эффект**: записывает только поле примечания.\n- **Завершение**: синхронное. Полностью идемпотентно при одинаковом теле запроса.",
        "tags": [
          "Profiles"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "envIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Идентификаторы среды: необходимо выбрать один из двух вариантов — этот или серийный."
                  },
                  "envRemark": {
                    "description": "Примечание, обязательно.",
                    "type": "string"
                  },
                  "uniqueIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Серийные идентификаторы, необходимо выбрать один из двух вариантов: этот или идентификатор среды."
                  }
                },
                "required": [
                  "envRemark"
                ]
              },
              "example": {
                "envRemark": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — одно значение типа boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "8172c8ff6ae048a9bb2546760832a460"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/closeAll": {
      "post": {
        "operationId": "closeAllBrowserProfilesLocal",
        "summary": "Закройте все открытые профили.",
        "deprecated": false,
        "description": "Закрывает все профили браузера, запущенные этим клиентом.\n\n- **Где выполняется**: десктопный клиент MoreLogin выполняет это целиком на вашей машине. **Серверной реализации нет**, поэтому никаких предварительных условий по аккаунту, команде или состоянию, кроме открытого в клиенте профиля, не существует, и в облаке ничего не записывается.\n- **Эффект**: ограничен локальными процессами и окнами браузера. Данные профиля, отпечаток и облачный кеш не затрагиваются.\n- **Завершение**: синхронное — клиент отвечает, как только выполнил действие.\n- **Доступность**: только Local API. В Open API аналога нет, потому что у неё нет локального браузера, с которым можно работать. Используйте эндпоинты облачной среды выполнения.\n- **Примечание**: поскольку этим владеет клиент, структура ответа зависит от версии установленного клиента, а не от контракта службы.",
        "tags": [
          "Runtime"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {}
              },
              "example": {}
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успех. Операция не возвращает полезную нагрузку; результат передаётся через `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Уникальный идентификатор запроса; укажите его при обращении в поддержку"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": "Closed successfully"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/getAllProcessIds": {
      "post": {
        "operationId": "getAllBrowserProcessIdsLocal",
        "summary": "Получить идентификаторы процессов всех открытых профилей",
        "deprecated": false,
        "description": "Выводит идентификаторы процессов запущенных профилей браузера.\n\n- **Где выполняется**: десктопный клиент MoreLogin выполняет это целиком на вашей машине. **Серверной реализации нет**, поэтому никаких предварительных условий по аккаунту, команде или состоянию, кроме открытого в клиенте профиля, не существует, и в облаке ничего не записывается.\n- **Эффект**: ограничен локальными процессами и окнами браузера. Данные профиля, отпечаток и облачный кеш не затрагиваются.\n- **Завершение**: синхронное — клиент отвечает, как только выполнил действие.\n- **Доступность**: только Local API. В Open API аналога нет, потому что у неё нет локального браузера, с которым можно работать. Используйте эндпоинты облачной среды выполнения.\n- **Примечание**: поскольку этим владеет клиент, структура ответа зависит от версии установленного клиента, а не от контракта службы.",
        "tags": [
          "Runtime"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {}
              },
              "example": {}
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — массив объектов с полями `envId`, `uniqueId`, `envName` и `pid`; пустой массив, если возвращать нечего.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "envId": {
                            "type": "string",
                            "description": "Идентификатор среды"
                          },
                          "uniqueId": {
                            "type": "integer",
                            "description": "Идентификатор последовательности"
                          },
                          "envName": {
                            "type": "string",
                            "description": "Название среды"
                          },
                          "pid": {
                            "type": "integer",
                            "description": "ПИД"
                          }
                        }
                      }
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Уникальный идентификатор запроса; укажите его при обращении в поддержку"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    {
                      "envId": "2014664375044337664",
                      "uniqueId": 1788,
                      "envName": "P-1788",
                      "pid": 22460
                    }
                  ]
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/getAllDebugInfo": {
      "post": {
        "operationId": "getAllBrowserDebugInfoLocal",
        "summary": "Получить информацию для удаленной отладки для всех открытых профилей.",
        "deprecated": false,
        "description": "Выводит отладочные эндпоинты запущенных профилей браузера.\n\n- **Где выполняется**: десктопный клиент MoreLogin выполняет это целиком на вашей машине. **Серверной реализации нет**, поэтому никаких предварительных условий по аккаунту, команде или состоянию, кроме открытого в клиенте профиля, не существует, и в облаке ничего не записывается.\n- **Эффект**: ограничен локальными процессами и окнами браузера. Данные профиля, отпечаток и облачный кеш не затрагиваются.\n- **Завершение**: синхронное — клиент отвечает, как только выполнил действие.\n- **Доступность**: только Local API. В Open API аналога нет, потому что у неё нет локального браузера, с которым можно работать. Используйте эндпоинты облачной среды выполнения.\n- **Примечание**: поскольку этим владеет клиент, структура ответа зависит от версии установленного клиента, а не от контракта службы.",
        "tags": [
          "Runtime"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {}
              },
              "example": {}
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — массив объектов с полями `envId`, `uniqueId`, `envName`, `debugPort`, `webdriver` и `pid`; пустой массив, если возвращать нечего.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "envId": {
                            "type": "string",
                            "description": "Идентификатор среды"
                          },
                          "uniqueId": {
                            "type": "integer",
                            "description": "Идентификатор последовательности"
                          },
                          "envName": {
                            "type": "string",
                            "description": "Название среды"
                          },
                          "debugPort": {
                            "type": "string",
                            "description": "Порт отладки"
                          },
                          "webdriver": {
                            "type": "string",
                            "description": "вебдрайвер"
                          },
                          "pid": {
                            "type": "integer",
                            "description": "ПИД"
                          }
                        }
                      }
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Уникальный идентификатор запроса; укажите его при обращении в поддержку"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    {
                      "envId": "2014664375044337664",
                      "uniqueId": 1788,
                      "envName": "P-1788",
                      "debugPort": "63536",
                      "webdriver": "C:\\Users\\EDY\\AppData\\Roaming\\MoreLogin\\env-kit\\Core\\chrome_64_142.9\\webdriver.exe",
                      "pid": 22460
                    }
                  ]
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/base/mobile/devices": {
      "post": {
        "operationId": "listMobileDeviceModelsLocal",
        "summary": "Получить список моделей телефонов",
        "deprecated": false,
        "description": "Возвращает модели мобильных устройств, доступные для профилей браузера Android и iOS.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Содержимое**: пересечение таблицы устройств MoreLogin и службы базовых данных отпечатков. Модели, присутствующие только в одном из двух источников, опускаются, а возвращаемый `id` принадлежит службе отпечатков, а не таблице устройств.",
        "tags": [
          "Fingerprint & Device Config"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Успех. `data` — массив объектов с полями `id`, `name`, `resolution`, `os` и `platform`; пустой массив, если возвращать нечего.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BrowserPhoneList"
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    {
                      "id": "1673823102599682",
                      "name": "example-name",
                      "resolution": "string",
                      "os": 1,
                      "platform": "string"
                    }
                  ],
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/env/core/download": {
      "post": {
        "operationId": "downloadBrowserKernelsLocal",
        "summary": "Скачать ядро браузера",
        "deprecated": false,
        "description": "Скачать и установить ядро(а) браузера. Поддерживает пакетную загрузку до 20 ядер за один запрос. Тайм-аут для этой операции может составлять до 30 минут; вызывающей стороне рекомендуется установить тайм-аут более 1805 секунд.\n\nТребуется версия клиента MoreLogin **2.61.1** или выше.\n\n### Обработка дублирующихся запросов\n\n- Если один и тот же тип браузера и основная версия встречаются несколько раз в одном запросе, поиск и загрузка выполняются только один раз, но каждая запись получает свой собственный результат.\n- Параллельные запросы для той же версии присоединятся к текущей задаче вместо начала новой загрузки.\n- Если запрошенная версия уже установлена с последней минорной версией, статус будет `already_installed`.\n- Если установлена старая минорная версия, она будет обновлена до последней доступной минорной версии.\n\n### Справочник кодов ошибок\n\n| errorCode | Описание |\n|---|---|\n| `INVALID_JSON` | Некорректный формат JSON |\n| `INVALID_REQUEST` | Некорректная структура запроса |\n| `BATCH_LIMIT_EXCEEDED` | Массив `Cores` превышает 20 элементов |\n| `UNSUPPORTED_BROWSER_TYPE` | Неподдерживаемый тип браузера |\n| `INVALID_VERSION` | Некорректный формат версии |\n| `METADATA_LOOKUP_FAILED` | Не удалось запросить метаданные ядра |\n| `UNSUPPORTED_VERSION` | Версия ядра не существует или не поддерживается на этой платформе |\n| `CLIENT_NOT_READY` | Клиент не готов |\n| `SDK_NOT_READY` | SDK не инициализирован |\n| `INSUFFICIENT_DISK_SPACE` | Недостаточно дискового пространства |\n| `DOWNLOAD_FAILED` | Загрузка не удалась |\n| `CHECKSUM_MISMATCH` | Проверка контрольной суммы MD5 не пройдена |\n| `EXTRACTION_FAILED` | Извлечение или установка не удалась |\n| `TIMEOUT` | Тайм-аут операции |\n| `UNKNOWN` | Неизвестная ошибка |\n",
        "tags": [
          "Runtime"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "Cores": {
                    "type": "array",
                    "description": "Список ядер для загрузки (1–20 элементов)",
                    "items": {
                      "type": "object",
                      "properties": {
                        "BrowserType": {
                          "type": "integer",
                          "description": "Тип браузера. `1`:Chrome, `2`:Firefox"
                        },
                        "Version": {
                          "type": "string",
                          "description": "Основной номер версии ядра, например `\"124\"`, `\"146\"`"
                        }
                      },
                      "required": [
                        "BrowserType",
                        "Version"
                      ]
                    }
                  }
                },
                "required": [
                  "Cores"
                ]
              },
              "example": {
                "Cores": [
                  {
                    "BrowserType": 1,
                    "Version": "124"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успех. `data` — объект с полями `total`, `succeeded`, `failed` и `results`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код ответа. `0`:все успешно; `-1`:частичный успех; `-2`:все неудачно"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Сообщение об ошибке на уровне запроса; обычно `null` при успехе"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "total": {
                          "type": "integer",
                          "description": "Общее количество запрошенных задач"
                        },
                        "succeeded": {
                          "type": "integer",
                          "description": "Количество успешных задач (включая уже установленные)"
                        },
                        "failed": {
                          "type": "integer",
                          "description": "Количество неудачных задач"
                        },
                        "results": {
                          "type": "array",
                          "description": "Результат выполнения для каждого входного элемента в том же порядке, что и в запросе",
                          "items": {
                            "type": "object",
                            "properties": {
                              "index": {
                                "type": "integer",
                                "description": "Соответствующий индекс в массиве `Cores` (начиная с 0)"
                              },
                              "browserType": {
                                "type": [
                                  "integer",
                                  "null"
                                ],
                                "description": "Тип браузера"
                              },
                              "requestedVersion": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "description": "Запрошенная основная версия"
                              },
                              "resolvedVersion": {
                                "type": "string",
                                "description": "Фактическая полная версия; возвращается при успехе или при разрешении метаданных"
                              },
                              "status": {
                                "type": "string",
                                "description": "Статус задачи:`installed`, `already_installed` или `failed`"
                              },
                              "source": {
                                "type": "string",
                                "description": "Источник загрузки:`downloaded`, `already_installed` или `joined_in_flight`"
                              },
                              "errorCode": {
                                "type": "string",
                                "description": "Стабильный код классификации ошибки, возвращаемый при неудаче"
                              },
                              "serverCode": {
                                "type": "integer",
                                "description": "Необязательно. Исходный код бизнес-ошибки от сервиса платформы"
                              },
                              "msg": {
                                "type": "string",
                                "description": "Отображаемое сообщение; может зависеть от языка клиента. Не используйте для программной проверки результатов"
                              }
                            }
                          }
                        }
                      },
                      "required": [
                        "total",
                        "succeeded",
                        "failed",
                        "results"
                      ]
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Уникальный идентификатор запроса; укажите его при обращении в поддержку"
                    }
                  },
                  "required": [
                    "code",
                    "data"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "total": 1,
                    "succeeded": 1,
                    "failed": 0,
                    "results": [
                      {
                        "index": 0,
                        "browserType": 1,
                        "requestedVersion": "124",
                        "resolvedVersion": "124.5",
                        "status": "installed",
                        "source": "downloaded",
                        "msg": "Download successful"
                      }
                    ]
                  }
                }
              }
            },
            "headers": {}
          }
        },
        "security": []
      }
    },
    "/api/cloudbrowser/start": {
      "post": {
        "summary": "Запустить облачную среду выполнения",
        "description": "Запускает профиль браузера как облачную среду выполнения.\n- **Предварительные условия**: профиль должен существовать в вашей команде и не должен быть зашифрован сквозным шифрованием или находиться в процессе передачи. **Прокси обязателен**, и его достижимость проверяется до принятия запуска. Ядро браузера должно поддерживаться облачным браузером, что исключает Firefox. Применяются командные лимиты на количество открытых сессий, а в развёртываниях с включённой тарификацией облачного браузера дополнительно проверяется баланс кредитов ИИ.\n- **Один запуск на профиль**: у участника может быть только один активный запуск на профиль. Когда команда включает блокировку безопасности, запуск другого участника блокирует ваш.\n- **Завершение**: **принято, но не завершено.** `data` пуст; среда выполнения готовится асинхронно. Опрашивайте `/cloudbrowser/page`, пока `cloudBrowserStatus` не станет `RUNNING`, затем вызовите `/cloudbrowser/connect` для получения `cdpUrl`. Запуск может быть принят и всё равно позже провалиться — это отражается на той же странице.\n- **Параллелизм**: одновременные запуски одного профиля сериализуются блокировкой; проигравший отклоняется, а не ставится в очередь.\n- **Повтор**: после таймаута читайте `/cloudbrowser/page` — не отправляйте запрос повторно.\n\nЗадокументированные бизнес-ошибки: `19039`, `19065`, `40001`, `40003`, `40015`, `40016`, `40021`, `40023`, `40024`, `40025`, `40026`, `40027`, `40028`, `40029`, `40037`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "operationId": "startCloudRuntimeLocal",
        "tags": [
          "Cloud Runtime"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudBrowserStartRequest"
              },
              "example": {
                "envId": "1800000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/VoidDataResponse"
          }
        },
        "security": []
      }
    },
    "/api/cloudbrowser/stop": {
      "post": {
        "summary": "Остановить облачную среду выполнения",
        "description": "Останавливает облачную среду выполнения, в которой работает профиль.\n- **Предварительные условия**: для этого профиля должен существовать активный запуск, начатый вами. Вызов в момент, когда среда уже остановлена или освобождается, возвращает успех и ничего не делает.\n- **Эффект**: прекращает начисление платы, закрывает учёт потребления, снимает блокировку профиля и просит клиент заархивировать профиль и cookie в облако до освобождения среды.\n- **Завершение**: **принято, но не завершено.** Опрашивайте `/cloudbrowser/page`, пока `cloudBrowserStatus` не станет `CLOSED`, а `cloudBrowserArchiveStatus` не достигнет `COMPLETED` или `FAILED`.\n- **Если архивация не удалась**: запуск остаётся тарифицируемым и по-прежнему отображается как `RUNNING`. `force` учитывается **только** в этом состоянии: он пропускает архивацию и освобождает среду, из-за чего изменения профиля в этой сессии теряются.\n- **Параллелизм**: одновременные остановки одного запуска сериализуются, поэтому дублирующий вызов безопасен.\n\nЗадокументированные бизнес-ошибки: `40002`, `40006`, `40008`, `40020`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "operationId": "stopCloudRuntimeLocal",
        "tags": [
          "Cloud Runtime"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudBrowserStopRequest"
              },
              "example": {
                "envId": "1800000000000001",
                "force": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/VoidDataResponse"
          }
        },
        "security": []
      }
    },
    "/api/cloudbrowser/page": {
      "post": {
        "summary": "Список облачных сред выполнения",
        "description": "Выводит профили браузера вместе со состоянием облачной среды выполнения для вызывающего участника.\n- **Эффект**: отсутствует. Только чтение. Повтор безопасен при ограниченной выдержке.\n- **Значения статуса**: `cloudBrowserStatus` может быть только `STARTING`, `RUNNING` или `CLOSED`. **`RUNNING` не означает, что браузер пригоден к работе**: среда, которая останавливается, архивируется или не смогла остановиться, тоже сообщается как `RUNNING`. Различить их помогает `cloudBrowserArchiveStatus` (`PENDING`, `ARCHIVING`, `COMPLETED`, `FAILED`), который равен null, когда активности нет.\n- **Согласованность**: разрешение среды выполнения работает по принципу «всё или ничего». Если его не удаётся выполнить для всей страницы, вызов завершается ошибкой, а не возвращает частичные данные.",
        "operationId": "pageCloudRuntimesLocal",
        "tags": [
          "Cloud Runtime"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudBrowserPageRequest"
              },
              "example": {
                "pageNo": 1,
                "pageSize": 10,
                "keyword": "marketing"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudBrowserPageResponse"
          }
        },
        "security": []
      }
    },
    "/api/cloudbrowser/connect": {
      "post": {
        "summary": "Подключиться к облачной среде выполнения",
        "description": "Возвращает данные подключения к запущенной облачной среде выполнения.\n- **Предварительные условия**: среда должна находиться строго в состоянии `RUNNING` и должна быть запущена вами. Среда, которая останавливается или архивируется, отклоняется, даже если `/cloudbrowser/page` по-прежнему сообщает `RUNNING`.\n- **Эффект**: выпускает новый токен доступа к рабочему столу и записывает вас как подключённого участника.\n- **Повторные вызовы**: возвращаемый `cdpUrl` стабилен, существующие CDP-сессии продолжают работать, но каждый вызов выпускает новый токен рабочего стола и перезаписывает записанного подключённого участника. **Прежние URL рабочего стола не отзываются**, поэтому считайте каждый возвращённый URL действующим секретом: не пишите его в логи и не сохраняйте.\n- **Ограничение сессии**: среда автоматически останавливается по достижении максимальной длительности, а архивация начинается незадолго до этого, поэтому долгоживущая автоматизация должна корректно переживать исчезновение среды.\n- **Применение**: подключите Puppeteer, Playwright или Selenium к `cdpUrl`.\n\nЗадокументированные бизнес-ошибки: `40008`, `40009`, `40010`. Значения кодов см. в [Error Codes](../Getting%20Started/error-codes.md). Любая операция может дополнительно вернуть общие коды.",
        "operationId": "connectCloudRuntimeLocal",
        "tags": [
          "Cloud Runtime"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudBrowserConnectRequest"
              },
              "example": {
                "envId": "1800000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudBrowserConnectResponse"
          }
        },
        "security": []
      }
    }
  },
  "components": {
    "schemas": {
      "CreateEnvironmentRequest": {
        "allOf": [
          {
            "$ref": "#/components/schemas/EnvironmentBase"
          },
          {
            "type": "object",
            "required": [
              "browserTypeId",
              "operatorSystemId"
            ],
            "properties": {
              "proxy": {
                "type": "object",
                "properties": {
                  "proxyId": {
                    "description": "Идентификатор прокси",
                    "type": "string"
                  },
                  "proxyName": {
                    "description": "Название прокси (не более 600 символов)",
                    "type": "string"
                  },
                  "proxyType": {
                    "description": "Тип прокси, 0: http, 1: https. Не может быть пустым, когда proxyProvider равен 7/8",
                    "type": "integer"
                  },
                  "proxyProvider": {
                    "description": "Тип прокси 0: http, 1: https, 2: socks5, 3: ssh, 4: Oxylabs, 5: Proxys.io, 7: Luminati, 8: Lumauto, 9: Oxylabsauto, 10: Trojan, 11: Shadowsocks, 13: ABCPROXY, 14: LunaProxy, 15: IPHTML, 16: PiaProxy, 17: 922S5, 18: 360Proxy",
                    "type": "string"
                  },
                  "proxyIp": {
                    "description": "IP прокси. Может быть пустым, когда proxyProvider равен 16/17/18; для остальных обязателен",
                    "type": "string"
                  },
                  "proxyPort": {
                    "description": "Порт прокси (только числа от 1 до 65535). Может быть пустым, когда proxyProvider равен 16/17/18; для остальных обязателен",
                    "type": "integer"
                  },
                  "username": {
                    "description": "Имя пользователя (не более 200 символов)",
                    "type": "string"
                  },
                  "password": {
                    "description": "Пароль (не более 100 символов)",
                    "type": "string"
                  },
                  "refreshUrl": {
                    "description": "URL обновления",
                    "type": "string"
                  },
                  "country": {
                    "description": "Код страны (например `us`). Поддерживаемые коды см. в [таблице стран и часовых поясов](/api-reference/appendix/country-time-zone). Обязателен, когда proxyProvider равен 16/17/18",
                    "type": "string"
                  },
                  "city": {
                    "description": "Город",
                    "type": "string"
                  },
                  "state": {
                    "description": "Штат/область",
                    "type": "string"
                  },
                  "encryptionType": {
                    "description": "Метод шифрования. Не может быть пустым, когда proxyProvider равен 11. 1: aes-128-gcm, 2: aes-192-gcm, 3: aes-256-gcm, 4: aes-128-cfb, 5: aes-192-cfb, 6: aes-256-cfb, 7: aes-128-ctr, 8: aes-192-ctr, 9: aes-256-ctr, 10: rc4-md5, 11: chacha20-ietf, 12: xchacha20, 13: chacha20-ietf-poly1305, 14: xchacha20-ietf-poly1305",
                    "type": "integer"
                  },
                  "ipMonitor": {
                    "description": "Включить отслеживание изменения IP? true: включено, false: выключено",
                    "type": "boolean"
                  },
                  "ipChangeAction": {
                    "description": "Отслеживание изменения IP 0: блокировать доступ, 1: предупреждать",
                    "type": "integer"
                  }
                },
                "description": "Данные прокси"
              }
            }
          }
        ]
      },
      "UpdateEnvironmentRequest": {
        "allOf": [
          {
            "$ref": "#/components/schemas/EnvironmentBase"
          },
          {
            "type": "object",
            "required": [
              "envId"
            ],
            "properties": {
              "envId": {
                "type": "string",
                "description": "Идентификатор окружения"
              }
            }
          }
        ]
      },
      "EnvironmentBase": {
        "type": "object",
        "properties": {
          "browserTypeId": {
            "type": "integer",
            "description": "ID типа браузера; 1=Chrome, 2=Firefox"
          },
          "operatorSystemId": {
            "type": "integer",
            "description": "ID типа ОС; 1:Windows 2:macOS 3:Android 4:IOS 5:Linux"
          },
          "isEncrypt": {
            "type": "integer",
            "description": "Шифровать ли профиль; 0=нет, 1=да"
          },
          "startupParams": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Дополнительные параметры запуска браузера"
          },
          "accountInfo": {
            "description": "Данные учётной записи",
            "$ref": "#/components/schemas/AccountInfo"
          },
          "advancedSetting": {
            "description": "Расширенные настройки отпечатка браузера",
            "$ref": "#/components/schemas/AdvancedSetting"
          },
          "afterStartupConfig": {
            "description": "Настройки после запуска",
            "$ref": "#/components/schemas/AfterStartupConfig"
          },
          "browserCore": {
            "type": "integer",
            "description": "Версия ядра; по умолчанию: 0 (автоподбор). Доступные версии можно получить через `/api/env/advanced/ua/versions`."
          },
          "cookies": {
            "type": "string",
            "description": "Строка cookie для предварительной загрузки (необязательно)"
          },
          "envName": {
            "type": "string",
            "description": "Название окружения"
          },
          "envRemark": {
            "type": "string",
            "description": "Примечание к окружению; максимальная длина: 1500 символов"
          },
          "groupId": {
            "type": "string",
            "description": "ID группы окружений; по умолчанию: без группы (0)"
          },
          "groupName": {
            "type": "string",
            "maxLength": 50,
            "description": "Название группы (макс. 50 символов). Если указано, система сначала проверяет groupId: если найдена действительная группа, она используется; в противном случае выполняется поиск по groupName. Если группа с таким именем существует, она используется; если нет — создаётся новая. Каждая команда ограничена 1 000 группами."
          },
          "proxyId": {
            "type": "string",
            "description": "ID прокси; по умолчанию: 0"
          },
          "tagIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "ID меток; по умолчанию: нет"
          },
          "uaVersion": {
            "type": "integer",
            "description": "Предустановленная версия UA; по умолчанию: 0 (все)"
          },
          "disableAudio": {
            "type": "integer",
            "description": "Отключить звук: 0 = нет, 1 = да"
          },
          "disableImg": {
            "type": "integer",
            "description": "Отключить загрузку изображений: 0 = нет, 1 = да"
          },
          "disableVideo": {
            "type": "integer",
            "description": "Отключить загрузку видео: 0 = нет, 1 = да"
          },
          "imgLimitSize": {
            "type": "integer",
            "description": "Максимальный размер изображения (КБ)"
          }
        }
      },
      "AccountInfo": {
        "type": "object",
        "properties": {
          "customerUrl": {
            "type": "string",
            "description": "Пользовательский URL платформы — обязателен, если platformId=9999, должен быть действительным URL-адресом."
          },
          "password": {
            "type": "string",
            "description": "Пароль; максимальная длина: 50 символов."
          },
          "platformId": {
            "type": "string",
            "description": "Идентификатор платформы; используйте 9999 для пользовательского URL. См. /api/system/platform/list."
          },
          "siteId": {
            "type": "string",
            "description": "Идентификатор сайта; получить через API «Получить настраиваемые платформы» (/api/system/platform/list)"
          },
          "username": {
            "type": "string",
            "maxLength": 64,
            "description": "Имя пользователя; максимальная длина: 64 символа."
          }
        }
      },
      "AdvancedSetting": {
        "type": "object",
        "description": "Расширенные настройки идентификации браузера и его поведения.",
        "properties": {
          "ua": {
            "type": "string",
            "description": "Настройка User-Agent (UA) профиля. Должен соответствовать стандартному формату UA.\nДоступно через API «Получить UA браузера».\n\n"
          },
          "time_zone": {
            "description": "Настройки часового пояса",
            "$ref": "#/components/schemas/TimeZoneConfig"
          },
          "web_rtc": {
            "description": "Настройки WebRTC",
            "$ref": "#/components/schemas/WebRTCConfig"
          },
          "geo_location": {
            "description": "Настройки геолокации",
            "$ref": "#/components/schemas/GeoLocationConfig"
          },
          "language": {
            "description": "Язык",
            "$ref": "#/components/schemas/LanguageConfig"
          },
          "resolution": {
            "description": "Настройки разрешения экрана",
            "$ref": "#/components/schemas/ResolutionConfig"
          },
          "font": {
            "description": "Настройки шрифтов",
            "$ref": "#/components/schemas/FontConfig"
          },
          "canvas": {
            "description": "Настройка отпечатка Canvas",
            "$ref": "#/components/schemas/CanvasConfig"
          },
          "webgl_image": {
            "description": "Настройки изображения WebGL",
            "$ref": "#/components/schemas/WebGLImageConfig"
          },
          "webgl_metadata": {
            "description": "Настройки метаданных WebGL",
            "$ref": "#/components/schemas/WebGLMetadataConfig"
          },
          "audio_context": {
            "description": "AudioContext: 1 = шум, 2 = подлинное значение",
            "$ref": "#/components/schemas/AudioContextConfig"
          },
          "media_device": {
            "description": "Медиаустройство: 1 = шум, 2 = подлинное значение",
            "$ref": "#/components/schemas/MediaDeviceConfig"
          },
          "client_rects": {
            "description": "ClientRects: 1 = шум, 2 = подлинное значение",
            "$ref": "#/components/schemas/ClientRectsConfig"
          },
          "speech_voise": {
            "description": "Синтез речи: 1 = приватность, 2 = подлинное значение",
            "$ref": "#/components/schemas/SpeechVoiseConfig"
          },
          "hardware_concurrency": {
            "type": "integer",
            "description": "Имитируемое количество логических ядер ЦП.\nПо умолчанию: 4. Варианты: 0 (реальное), 2, 3, 4, 6, 8, 10, 12.\n\n"
          },
          "memery_device": {
            "type": "integer",
            "description": "Имитируемая память устройства (ГБ).\nПо умолчанию: 8. Варианты: 0 (реальное значение), 2, 4, 6, 8.\n\n"
          },
          "do_not_track": {
            "type": "integer",
            "description": "Настройка «Не отслеживать». Значение по умолчанию: 2. 1 = включено, 2 = выключено."
          },
          "bluetooth": {
            "description": "Bluetooth: 1 = приватность, 2 = подлинное значение",
            "$ref": "#/components/schemas/BluetoothConfig"
          },
          "battery": {
            "description": "Батарея: 1 = приватность, 2 = подлинное значение",
            "$ref": "#/components/schemas/BatteryConfig"
          },
          "port_scan_protection": {
            "description": "Защита от сканирования портов",
            "$ref": "#/components/schemas/PortScanProtectionConfig"
          },
          "os_version": {
            "type": "string",
            "description": "Версия системы macOS (например, macOS 12, macOS 13, macOS 14)."
          },
          "web_gpu": {
            "description": "Настройки WebGPU",
            "$ref": "#/components/schemas/WebGPUConfig"
          },
          "ciphers": {
            "description": "Настройки набора шифров",
            "$ref": "#/components/schemas/CiphersConfig"
          },
          "mobile_device": {
            "type": "string",
            "description": "Идентификатор модели телефона (в виде строки). Получить с помощью API \"Получить список моделей телефонов\".\nПример: \"1826502391344832512\"\n\n"
          }
        }
      },
      "TimeZoneConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Параметр часового пояса. По умолчанию: 1. 1 = Соответствие IP-адресу, 2 = Пользовательский."
          },
          "value": {
            "type": "string",
            "description": "Требуется, если switcher=2.\nИдентификатор часового пояса из API «Получить список часовых поясов и языков».\n\n"
          }
        }
      },
      "WebRTCConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Политика WebRTC. По умолчанию: 2. 1 = Конфиденциальность, 2 = Замена, 3 = Реальный, 4 = Отключено, 5 = Переадресация.\n\n"
          }
        }
      },
      "GeoLocationConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Политика геолокации. По умолчанию: 1. 1 = Запрос, 2 = Отключено."
          },
          "base_on_ip": {
            "type": "boolean",
            "description": "Определять местоположение по IP-адресу? По умолчанию: true. true = запрос, false = вручную."
          },
          "latitude": {
            "type": "number",
            "format": "float",
            "description": "Широта. Обязательно, если base_on_ip=false."
          },
          "longitude": {
            "type": "number",
            "format": "float",
            "description": "Долгота. Обязательно, если base_on_ip=false."
          },
          "accuracy": {
            "type": "number",
            "format": "float",
            "description": "Точность в метрах. Требуется, если base_on_ip=false."
          }
        }
      },
      "LanguageConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Языковая политика. По умолчанию: 1. 1 = Соответствие IP-адресу, 2 = Пользовательский."
          },
          "value": {
            "type": "string",
            "description": "Обязательно, если switcher=2.\nИдентификаторы языков, разделенные запятыми, из API «Получить список часовых поясов и языков».\n\n"
          }
        }
      },
      "ResolutionConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Политика разрешения. По умолчанию: 1. 1 = Реальное, 2 = Пользовательское."
          },
          "id": {
            "type": "string",
            "description": "Обязательно, если switcher=2.\nИдентификатор разрешения из API «Получить список разрешений».\n\n"
          }
        }
      },
      "FontConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Политика шрифтов. По умолчанию: 1. 1 = Настоящий, 2 = Пользовательский."
          },
          "value": {
            "type": "string",
            "description": "Названия пользовательских шрифтов, разделённые запятыми (обязательно, если switcher=2)."
          }
        }
      },
      "CanvasConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Политика Canvas. По умолчанию: 1. 1 = Шум, 2 = Реальный."
          }
        }
      },
      "WebGLImageConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Политика обработки изображений WebGL. По умолчанию: 1. 1 = Шум, 2 = Реальный."
          }
        }
      },
      "WebGLMetadataConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Политика метаданных WebGL. По умолчанию: 3. 1 = Реальное ускорение, 2 = Отключить аппаратное ускорение, 3 = Пользовательское ускорение."
          },
          "provider": {
            "type": "string",
            "description": "Строка сервиса WebGL (например, \"Google Inc.\")"
          },
          "render": {
            "type": "string",
            "description": "Строка рендеринга WebGL (например, \"ANGLE (...)\")"
          }
        }
      },
      "AudioContextConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Политика AudioContext. По умолчанию: 1. 1 = Шум, 2 = Реалистичный."
          }
        }
      },
      "MediaDeviceConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Политика медиаустройства. По умолчанию: 1. 1 = Шум, 2 = Реальный."
          }
        }
      },
      "ClientRectsConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Политика ClientRects. По умолчанию: 1. 1 = Шум, 2 = Реальный."
          }
        }
      },
      "SpeechVoiseConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Политика SpeechVoices. По умолчанию: 1. 1 = Конфиденциальность, 2 = Реальность"
          }
        }
      },
      "BluetoothConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Политика Bluetooth. По умолчанию: 1. 1 = Конфиденциальность, 2 = Аутентичность."
          }
        }
      },
      "BatteryConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Политика использования батареи. По умолчанию: 1. 1 = Конфиденциальность, 2 = Подлинность."
          }
        }
      },
      "PortScanProtectionConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Защита от сканирования портов. По умолчанию: 1. 1 = Вкл., 2 = Выкл."
          },
          "value": {
            "type": "string",
            "description": "Разрешено подключение локальных сетевых портов (разделенных запятыми)."
          }
        }
      },
      "WebGPUConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Политика WebGPU. По умолчанию: 1. 1 = сопоставление на основе WebGL, 2 = истинно, 3 = отключено."
          }
        }
      },
      "AfterStartupConfig": {
        "type": "object",
        "properties": {
          "afterStartup": {
            "type": "integer",
            "format": "int32",
            "description": "Действие после запуска. По умолчанию: 1.\n\n1 = Продолжить просмотр последней страницы,\n2 = Открыть указанные URL-адреса,\n3 = Открыть URL-адреса + платформа,\n4 = Продолжить просмотр последней страницы + платформа.\n\n"
          },
          "autoOpenUrls": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            },
            "description": "Список допустимых URL-адресов для автоматического открытия (обязательно для вариантов 2–3)."
          }
        }
      },
      "CiphersConfig": {
        "type": "object",
        "properties": {
          "switcher": {
            "type": "integer",
            "description": "Политика шифрования TLS. По умолчанию: 1. 1 = По умолчанию, 2 = Пользовательская."
          },
          "value": {
            "type": "string",
            "description": "Обязательно, если switcher=2.\nСписок протоколов TLS, разделенных запятыми, для отключения (например, \"TLSv1,TLSv1.1\").\n\n"
          }
        }
      },
      "BrowserPhoneList": {
        "type": "object",
        "properties": {
          "code": {
            "description": "Возвращаемый код результата 0: Нормальный. Остальные коды являются исключениями.",
            "type": "integer"
          },
          "msg": {
            "description": "Сообщение об ошибке",
            "type": [
              "string",
              "null"
            ]
          },
          "data": {
            "description": "Данные ответа",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "resolution": {
                  "type": "string"
                },
                "os": {
                  "type": "integer"
                },
                "platform": {
                  "type": "string"
                }
              }
            }
          },
          "requestId": {
            "description": "Идентификатор запроса на операцию",
            "type": "string"
          }
        },
        "required": [
          "code",
          "msg",
          "data",
          "requestId"
        ]
      },
      "EnvironmentId": {
        "type": "string",
        "pattern": "^[1-9]\\d*$",
        "description": "Browser profile (environment) ID. Serialized as a decimal string to avoid JavaScript\nprecision loss on 64-bit integers.\n",
        "example": "1800000000000001"
      },
      "CloudBrowserStartRequest": {
        "type": "object",
        "properties": {
          "envId": {
            "$ref": "#/components/schemas/EnvironmentId"
          }
        },
        "required": [
          "envId"
        ]
      },
      "ApiResponseBase": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "description": "Return result code. `0` means success; other codes indicate exceptions.",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Error message. Usually `null` on success.",
            "example": null
          },
          "requestId": {
            "type": "string",
            "description": "Operation request ID. This field may be present when the request passes through the API gateway.",
            "example": "1d4f3ea968664593860b94b35d4ebf5e"
          }
        },
        "required": [
          "code",
          "msg"
        ]
      },
      "CloudBrowserStopRequest": {
        "type": "object",
        "properties": {
          "envId": {
            "$ref": "#/components/schemas/EnvironmentId"
          },
          "force": {
            "type": "boolean",
            "description": "Whether to forcibly release the cloud runtime. Only takes effect when the current run has\nan archive status of `FAILED`; in that case the archive step is skipped and runtime\nresources are reclaimed. Ignored in all other cases.\n",
            "default": false,
            "example": false
          }
        },
        "required": [
          "envId"
        ]
      },
      "CloudBrowserPageRequest": {
        "type": "object",
        "properties": {
          "uniqueIds": {
            "type": "array",
            "description": "Environment sequence numbers. Up to 100 items.",
            "maxItems": 100,
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "example": [
              1001,
              1002
            ]
          },
          "envId": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnvironmentId"
              }
            ],
            "description": "Environment ID. The request also accepts the field alias `id`."
          },
          "envName": {
            "type": "string",
            "description": "Environment name.",
            "example": "marketing-01"
          },
          "keyword": {
            "type": "string",
            "description": "Keyword filter. Matches environment name, group name, tag name, and remark.",
            "example": "marketing"
          },
          "groupId": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Group ID. `0` means ungrouped.",
            "example": "0"
          },
          "pageNo": {
            "type": "integer",
            "format": "int64",
            "description": "Current page number, starting from 1. Default is 1.",
            "minimum": 1,
            "default": 1,
            "example": 1
          },
          "pageSize": {
            "type": "integer",
            "format": "int64",
            "description": "Number of items per page. Default is 10, maximum 100.",
            "minimum": 1,
            "maximum": 100,
            "default": 10,
            "example": 10
          }
        },
        "required": [
          "pageNo",
          "pageSize"
        ]
      },
      "CloudBrowserStatus": {
        "type": "string",
        "description": "Cloud runtime status:\n- `STARTING` — starting up\n- `RUNNING` — running and ready to connect\n- `CLOSED` — not started, closed, or failed to start\n",
        "enum": [
          "STARTING",
          "RUNNING",
          "CLOSED"
        ],
        "example": "RUNNING"
      },
      "CloudBrowserArchiveStatus": {
        "type": [
          "string",
          "null"
        ],
        "description": "Archive status of the current cloud run. `null` when there is no active run record:\n- `PENDING` — pending archive\n- `ARCHIVING` — archiving\n- `COMPLETED` — archive completed\n- `FAILED` — archive failed\n",
        "enum": [
          "PENDING",
          "ARCHIVING",
          "COMPLETED",
          "FAILED",
          null
        ],
        "example": null
      },
      "CloudBrowserPageItem": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/EnvironmentId"
          },
          "envName": {
            "type": "string",
            "description": "Environment name.",
            "example": "marketing-01"
          },
          "proxyId": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^\\d+$",
            "description": "Proxy ID currently bound to the profile. `null` when no proxy is configured.",
            "example": "1800000000000101"
          },
          "cloudBrowserStatus": {
            "$ref": "#/components/schemas/CloudBrowserStatus"
          },
          "cloudBrowserArchiveStatus": {
            "$ref": "#/components/schemas/CloudBrowserArchiveStatus"
          },
          "startDate": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$",
            "description": "Cloud runtime start time. `null` while starting, or when not started or closed.",
            "example": "2026-01-15 10:30:00"
          }
        },
        "required": [
          "id",
          "envName",
          "cloudBrowserStatus"
        ]
      },
      "CloudBrowserPageData": {
        "type": "object",
        "properties": {
          "total": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Total number of records.",
            "example": "42"
          },
          "current": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Current page number.",
            "example": "1"
          },
          "pages": {
            "type": "string",
            "pattern": "^\\d+$",
            "description": "Total number of pages.",
            "example": "5"
          },
          "dataList": {
            "type": "array",
            "description": "Environments on the current page. Empty array when there are no results.",
            "items": {
              "$ref": "#/components/schemas/CloudBrowserPageItem"
            }
          }
        },
        "required": [
          "total",
          "current",
          "pages",
          "dataList"
        ]
      },
      "CloudBrowserConnectRequest": {
        "type": "object",
        "properties": {
          "envId": {
            "$ref": "#/components/schemas/EnvironmentId"
          }
        },
        "required": [
          "envId"
        ]
      },
      "CloudBrowserConnectResult": {
        "type": "object",
        "properties": {
          "cdpUrl": {
            "type": "string",
            "description": "Full CDP (Chrome DevTools Protocol) address including the access `token` parameter. Pass this\nURL to an automation framework such as Puppeteer, Playwright, or Selenium to attach to the\nremote browser.\n",
            "example": "https://runtime1.morelogin.com:16167?token=c62fedaaac524e41a0f02fc4345d41cb"
          },
          "accessUrl": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cloud browser page wrapper address. Open it in a browser to view and control the cloud\nbrowser desktop. `null` when the page wrapper is not configured.\n\nThe `token` parameter is a Base64-encoded payload carrying the desktop URL, desktop token,\nexpiry, and team, user, member, and environment IDs. The `envName` and `lang` parameters set\nthe displayed environment name and interface language.\n",
            "example": "https://official-website.morelogin.com/browser-remote?token=eyJkZXNrdG9wVXJsIjoi...ZW52SWQiOiIyMDczMzk1NDg5NzM4OTE5OTM2In0%3D&envName=P-1267&lang=en-US"
          }
        },
        "required": [
          "cdpUrl"
        ]
      }
    },
    "responses": {
      "VoidDataResponse": {
        "description": "Success",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ApiResponseBase"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "null",
                      "example": null
                    }
                  }
                }
              ]
            }
          }
        }
      },
      "CloudBrowserPageResponse": {
        "description": "Success",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ApiResponseBase"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/CloudBrowserPageData"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              ]
            }
          }
        }
      },
      "CloudBrowserConnectResponse": {
        "description": "Success",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ApiResponseBase"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/CloudBrowserConnectResult"
                    }
                  },
                  "required": [
                    "data"
                  ]
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": {
                "cdpUrl": "https://runtime1.morelogin.com:16167?token=c62fedaaac524e41a0f02fc4345d41cb",
                "accessUrl": "https://official-website.morelogin.com/browser-remote?token=eyJkZXNrdG9wVXJsIjoi...ZW52SWQiOiIyMDczMzk1NDg5NzM4OTE5OTM2In0%3D&envName=P-1267&lang=en-US"
              },
              "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
            }
          }
        }
      }
    }
  }
}